我有两个疑问:
查询 1:
SELECT DISTINCT maker FROM Product WHERE type='laptop'
Run Code Online (Sandbox Code Playgroud)
给出结果 {A, B, E, F, G}
和
查询 2:
SELECT DISTINCT maker FROM Product WHERE type='pc'
Run Code Online (Sandbox Code Playgroud)
给出结果 {A, B, C, D, E}
问题是:我怎样才能得到query1 - query2 = {A, B, E, F, G} - {A, B, C, D, E} = {F, G}
我试过:
SELECT DISTINCT maker FROM Product WHERE type='pc' AND NOT EXISTS (
SELECT DISTINCT maker FROM Product WHERE type='b'
);
Run Code Online (Sandbox Code Playgroud)
但它给了我空的记录。对不起,我是 MySQL 的新手
您可以NOT IN
改用:
SELECT DISTINCT maker
FROM Product
WHERE type='pc'
AND maker NOT IN
(
SELECT maker
FROM Product
WHERE type='b'
AND maker IS NOT NULL -- to prevent empty results
);
Run Code Online (Sandbox Code Playgroud)
注意:这对NULL
制造商来说是不正确的。
推荐的解决方案是NOT EXISTS
,但您需要一个相关的子查询:
SELECT DISTINCT maker
FROM Product AS p1
WHERE type='pc'
AND NOT EXISTS
(
SELECT maker
FROM Product AS p2
WHERE type='b'
AND p1.maker = p2.maker -- correlation to the outer SELECT
);
Run Code Online (Sandbox Code Playgroud)
如果 MySQL 支持,EXCEPT
这将是一个简单的
SELECT maker FROM Product WHERE type='pc'
EXCEPT
SELECT maker FROM Product WHERE type='b';
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
137 次 |
最近记录: |