好吧,这似乎应该是一个简单的,所以我会尝试简化我想要做的事情。
说我有这个选择声明:
SELECT a.customer, b.fruit
FROM Customer a
INNER JOIN Order b ON a.customer = b.Customer
将返回以下内容:
Customer Fruit
-------------------------
Jane Apple
Jane Banana
Bob Apple
Bob Orange
Bob Grape
John Apple
John Banana
Ann Tangerine
Ann Orange
Ann Banana
我想从这个结果集中得出的是一个从未订购过的客户列表,比如说,#Tangerine',产生以下列表:
Customer
--------
Jane
Bob
John
怎么会这样做呢?提前谢谢!
答案 0 :(得分:2)
有很多方法可以做到这一点:
SELECT *
FROM Customer c
WHERE NOT EXISTS(SELECT 1 FROM Order
WHERE customer = c.customer
And Fruit = 'Tangerine');
使用NOT IN
:
SELECT *
FROM Customer c
WHERE c.Customer NOT IN (SELECT Customer FROM Order
WHERE Customer IS NOT NULL
And Fruit = 'Tangerine');
答案 1 :(得分:1)
以下是使用left join
的一种方法:
SELECT c.customer
FROM Customer c LEFT JOIN
Order o
ON c.customer = o.Customer AND o.fruit = 'Tangerine'
WHERE o.Customer IS NULL;
答案 2 :(得分:0)
现有答案缺少不同的客户
compound
我不喜欢桌子和柱子 那将是更多和订单表