MySQL选择链接的行

时间:2009-09-01 05:55:35

标签: sql mysql

我有两张桌子:

表“A”:

+----------+
| item_id  |
+----------+
| 10       |
| 20       |
| 30       |
| 40       |
+----------+

和表“B”:

+----------+-------------+
| item_id  |   user_id   |
+----------+-------------+
| 10       | 1           |
| 10       | 2           |
| 20       | 1           |
| 30       | 2           |
+----------+-------------+

字段“item_id”是一个公共字段。

如果我希望选择表A中存在用户1和2的所有行(但不存在两个中只有一个存在的行),那么我如何构建此查询呢? (我希望结果中有一行,其中item_id为10)。

4 个答案:

答案 0 :(得分:4)

试试这个:

  SELECT a.item_id
    FROM TABLE_A a
    JOIN TABLE_B b ON b.item_id = a.item_id
   WHERE b.user_id IN (1, 2)
GROUP BY a.item_id
  HAVING COUNT(*) = 2

答案 1 :(得分:2)

另一种选择:

SELECT A.*
FROM tableA A
INNER JOIN tableB B1 ON B1.item_id = A.item_id AND B1.user_id = 1
INNER JOIN tableB B2 ON B2.item_id = A.item_id AND B2.user_id = 2

两次加入A到B,一次为一个用户,另一次为另一个用户。这是另一种说明从B到自身的自我联接的方式,以便与两个用户一起找到项目。

这不会超出两个用户(每个用户都需要额外的连接)。

答案 2 :(得分:0)

select item_id from table_b where user_id = 1
intersect
select item_id from table_b where user_id = 2

答案 3 :(得分:0)

SELECT a.item_id FROM a
    INNER JOIN b x ON a.item_id = x.item_id
    INNER JOIN b y ON x.item_id = y.item_id   
        AND x.user_id = 1 AND y.user_id = 2;