2011-01-19 30 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

相关问题