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

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