这个场景很简单:我在表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
次'解决方案中),那将是我的喜爱。
答案 0 :(得分:4)
SELECT *
FROM a
WHERE (
SELECT COUNT(*)
FROM b
WHERE b.id_a = a.id
AND b.tag IN ('foo', 'bar', 'baz')
) = 3