MySQL:如果ID与表B中的2(或任意n)行匹配,则从表A中选择

时间:2011-01-19 12:54:43

标签: mysql join tagging

这个场景很简单:我在表A中有内容,表B中有内容的标签:

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

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

我想选择A中的所有内容行,其中包含标记'foo':

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

到目前为止,这很简单。

我的问题是:如何选择 标记'foo'标记'bar'的内容行?特别是,如何为任意n 选择n > 1标记'foo','bar',...的行?

解决方案是加入B n次,但这感觉不好,而且我认为,这并不是真正的高效。

由于我使用带有预处理语句的MySQL,PHP和PDO,如果在PHP部分中存在没有必要的字符串连接的解决方案(例如在'Join n次'解决方案中),那将是我的喜爱。

1 个答案:

答案 0 :(得分:4)

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