T-SQL返回值不存在的记录(客户)

时间:2017-03-15 18:58:48

标签: sql sql-server tsql

好吧,这似乎应该是一个简单的,所以我会尝试简化我想要做的事情。

说我有这个选择声明:

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

怎么会这样做呢?提前谢谢!

3 个答案:

答案 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

我不喜欢桌子和柱子 那将是更多和订单表