2012-01-05 38 views
4

我正在創建一個MySQL查詢,我想檢索一個ID,但只有當我在查詢中指定的所有行中找到它時才匹配它。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不應退還,因爲它只滿足最後兩個條款中的第一個條款。

我該怎麼辦? (請注意,我以前問過這個問題,但我的要求不清楚。第二次嘗試。) 在此先感謝您的任何建議。

回答

5

加入救援! :-)每個表的

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

感謝 - 這看起來不錯。如果我有兩個以上的行,例如5行,如果我用五個內部聯接動態構造查詢,這仍然可以工作嗎? – Lemmy 2012-01-05 09:59:46

+0

試試看:-) – 2012-01-05 10:00:10

+0

@Lemmy:應該工作,是的。雖然,如果我是你,我會重新思考我的模式在這種情況下:-) – 2012-01-05 10:02:57

0

單一訪問:

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) 
+0

如果列值不同,您如何表達?例如(vlrc.row = 1 AND vlrc.columns = 2) (vlrc.row = 2 AND vlrc.columns = 5) – Lemmy 2012-01-05 10:54:23

+0

相應地修改內聯視圖中的where子句 - 例如。 '(行= 1和列= 2)或(行= 2和列= 5)'。 – 2012-01-05 11:01:24

+0

這似乎是一個不錯的解決方案 - 謝謝。 – Lemmy 2012-01-05 11:13:06