/ / MySql, dotaz na vnútorné spojenie, sa musí zhodovať s viacerými riadkami - mysql, sql, vnútorné spojenie

MySql, dopyt vnútorného spojenia, musí zodpovedať viacerým riadkom - mysql, sql, inner-join

Robím dotaz MySQL, kde chcem načítať ID, ale iba ak nájdem zhodu vo všetkých riadkoch, ktoré uvediem v dotaze.

Table: view_layout_rows

ID    owner    rows
___________________
49    1        2
50    1        2




Table: view_layout_rows_columns

ID    row    columns
___________________
49    1      5
49    2      4
50    1      5
50    2      5



SELECT vlr.id
FROM view_layout_rows vlr
INNER JOIN view_layout_rows_columns vlrc
ON vlr.id = vlrc.id
WHERE vlr.rows = 2
AND (vlr.owner = 0 OR vlr.owner = 1)

A mali by byť splnené všetky nasledujúce podmienky:

(vlrc.row = 1 AND vlrc.columns = 5)
(vlrc.row = 2 AND vlrc.columns = 5)

Vrátiť by sa malo iba ID 50. 49 by NEMALI byť vrátený, pretože spĺňa iba prvú z posledných dvoch doložiek.

Ako s tým môžem ísť? (Upozorňujeme, že túto otázku som už položil predtým, ale moja požiadavka bola nejasná. Druhý pokus.) Vopred ďakujeme za akékoľvek návrhy.

odpovede:

5 pre odpoveď č. 1

Pripojte sa k záchrane dvakrát! :-)

SELECT vlc.*
FROM view_layout_rows vlc
INNER JOIN view_layout_rows_columns vlrc1 ON vlrc1.id = vlc.id
INNER JOIN view_layout_rows_columns vlrc2 ON vlrc2.id = vlc.id
WHERE vlrc1.row = 1 AND vlrc1.columns = 5
AND vlrc2.row = 2 AND vlrc2.columns = 5

/* imported from original query */
AND vlr.rows = 2
AND (vlr.owner = 0 OR vlr.owner = 1);

0 pre odpoveď č. 2

Jeden prístup ku každej tabuľke:

select r.*
from view_layout_rows r
join (select id, count(*) rec_count
from view_layout_rows_columns
where row in (1,2) and
columns = 5
group by id
having count(*) = 2) c
on r.id = c.id
where r.rows = 2 and
r.owner in (0,1)