2011-01-19 47 views
4

的情況是相當簡單:我有內容表A的含量和標籤表B:MySQL的:從表A中選擇,如果ID表B中匹配2(或任意N)行

Table A: 
+----+-------+-... 
| id | title | ... 
+----+-------+-... 

Table B: 
+------+-----+ 
| id_A | tag | 
+------+-----+ 

我要選擇一箇中的所有內容行,有標籤「富」:

SELECT A.* FROM A, B WHERE A.id = B.id_A AND B.tag = 'foo' 

到目前爲止,這是簡單的。

我的問題是:如何選擇內容的行,有兩個標籤「富」 標籤「吧」?特別是,我怎樣才能選擇具有n標籤'foo','bar',...的行任意n > 1

解決方法是加入B n次,但感覺不好,我認爲它並不是真正的高性能。

因爲我使用MySQL,PHP和PDO與預處理語句,如果有一個解決方案沒有必要的字符串連接(如'加入n次'解決方案)在PHP部分,這將是我的最愛。

回答

4
SELECT * 
FROM a 
WHERE (
     SELECT COUNT(*) 
     FROM b 
     WHERE b.id_a = a.id 
       AND b.tag IN ('foo', 'bar', 'baz') 
     ) = 3 
+0

+1:但是,不知道爲什麼你們避免了在ID上加入? – VoodooChild 2011-01-19 13:06:17

相關問題