MySQL:如果ID与表B中的2(或任意n)行匹配,则从表A中选择
作者:互联网
这个场景很简单:我在表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个标签’foo’,’bar’,…的行,用于任意n> 1?
一个解决方案是加入B n次,但这感觉不好,而且我认为,它并不是真正的高效.
由于我使用MySQL,PHP和PDO准备语句,如果有一个解决方案没有必要的字符串连接(如在’加入n次’解决方案中)在PHP部分,这将是我的最爱.
解决方法:
SELECT *
FROM a
WHERE (
SELECT COUNT(*)
FROM b
WHERE b.id_a = a.id
AND b.tag IN ('foo', 'bar', 'baz')
) = 3
标签:mysql,join,tagging 来源: https://codeday.me/bug/20190626/1297544.html