Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
T-SQL返回值不存在的记录(客户)_Sql_Sql Server_Tsql - Fatal编程技术网

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

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语句:

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
条件)