SQL WHERE 在一列中查找 2 个数据



我有 2 张桌子

项目:

name
id
other

.part:

name_part
id
other

我想进行查询以查找与name_part = 'a' 和 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:我已经问过一个类似的问题,但它非常不精确。

你可以用 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')

或连接表,按项目分组并在 HAVING 子句中设置条件:

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

尽管我使用了示例数据中的列名,但我认为表part中的列id应重命名为类似item_id的名称,因为它引用了itemid

Forpas的解决方案非常合理。 不过,这个答案扩展了你的尝试。

你可以用join做你想做的事,但你需要其中两个:

SELECT i.name
FROM item i JOIN
part pa
ON pa.id = i.id  AND
pa.name_part = 'a' JOIN
part pb
ON pb.id = i.id AND
pb.name_part = 'b';

您的版本无法正常工作,因为name_part不能在同一行中同时'a''b'

最新更新