T-SQL返回值不存在的记录(客户)
好的,这似乎应该是一个简单的,所以我会尽量简化我正在尝试做的事情 假设我有这个select语句:T-SQL返回值不存在的记录(客户),sql,sql-server,tsql,Sql,Sql Server,Tsql,好的,这似乎应该是一个简单的,所以我会尽量简化我正在尝试做的事情 假设我有这个select语句: SELECT a.customer, b.fruit FROM Customer a INNER JOIN Order b ON a.customer = b.Customer 将返回以下内容: Customer Fruit ------------------------- Jane Apple Jane Banana Bob
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
我想从这个结果集中得到一个从未订购过(比如)橘子的客户列表,结果如下:
Customer
--------
Jane
Bob
John
一个人要怎么做呢?提前谢谢 这里有一个使用左连接的方法:
SELECT c.customer
FROM Customer c LEFT JOIN
Order o
ON c.customer = o.Customer AND o.fruit = 'Tangerine'
WHERE o.Customer IS NULL;
有很多方法可以做到这一点:
SELECT *
FROM Customer c
WHERE NOT EXISTS(SELECT 1 FROM Order
WHERE customer = c.customer
And Fruit = 'Tangerine');
使用不在中的:
SELECT *
FROM Customer c
WHERE c.Customer NOT IN (SELECT Customer FROM Order
WHERE Customer IS NOT NULL
And Fruit = 'Tangerine');
现有答案缺少不同的客户
SELECT distinct c.customer
FROM Customer c
WHERE NOT EXISTS ( SELECT 1
FROM Customer T
WHERE T.customer = c.customer
And T.Fruit = 'Tangerine'
);
我不喜欢表和列是一样的
这将是更多和订单表太好了!我相信我已经达到了我所期待的结果,使用NOT IN。我假设如果我想要这些结果的倒数,我会用IN而不是IN?谢谢大家@Zwick44我的意思是,不一定,如果我只是想让列表显示那些曾经点过橘子的顾客,你就需要提供更多的详细信息。@Zwick44啊,是的,在这种情况下,在
中使用就行了(但是如果customer
列可以是NULL
,则需要使用不为NULL
条件)