MySql, внутренний запрос соединения, должен соответствовать нескольким строкам - PullRequest
4 голосов
/ 05 января 2012

Я делаю запрос MySQL, в котором я хочу получить идентификатор, но только если я нахожу для него совпадение во всех строках, которые я указываю в запросе.

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)

И все следующиеУсловия должны быть выполнены:

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

Только ID 50 должны быть возвращены.49 НЕ ДОЛЖЕН возвращаться, так как он удовлетворяет только первому из последних двух пунктов.

Как я могу поступить об этом?(Обратите внимание, я задавал этот вопрос ранее, но мое требование было неясным. Вторая попытка.) Заранее благодарим за любые предложения.

Ответы [ 2 ]

7 голосов
/ 05 января 2012

Двойное присоединение к спасению!: -)

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 голосов
/ 05 января 2012

Однократный доступ к каждой таблице:

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)
...