首页 > 解决方案 > SQL WHERE 在一列中查找 2 个数据

问题描述

我有 2 张桌子

物品:

name
id
other

部分:

name_part
id
other

我希望进行查询以查找与 name_part = 'a' AND name_part = 'b' 链接的项目

同一物品中有 2 个不同的部分

询问:

SELECT item.name
FROM item
INNER JOIN table1 ON item.id = part.id
WHERE part.name_part = 'a' AND part.name_part = 'b'

输出我们'0'

也许嵌套WHERE

我试过了,但我找不到如何让它工作。

PS:我已经问过一个类似的问题,但它非常不精确。

标签: sqlnestedwhere-clause

解决方案


你可以用 EXISTS 做到这一点:

SELECT i.name
FROM item i
WHERE
  EXISTS (SELECT 1 FROM part p WHERE p.id = i.id and p.name_part = 'a')
  AND
  EXISTS (SELECT 1 FROM part p WHERE p.id = i.id and p.name_part = 'b')

或加入表,按项目分组并在have子句中设置条件:

SELECT i.name
FROM item i INNER JOIN part p 
ON i.id = p.id
WHERE p.name_part IN ('a', 'b')
GROUP BY i.name
HAVING COUNT(DISTINCT p.name_part) = 2

尽管我使用了您的示例数据中的列名,但我相信表中的列id应该part重命名为类似的东西,item_id因为它引用iditem.


推荐阅读