我想,理解外部联接有点困难。这是一个与学校有关的问题;通常我不会问这里的人,但我似乎无法让它工作。外部联接问题
我有一个表Customer
,其中包括customerID
,和其他客户的信息。 我也有一个名为Orders
的表,其中包括customerID
,买了什么,以及有多少。现在
,我只是想列出谁没有买过东西的所有客户,(也就是说,他们的客户ID不在订单表。)
你能帮忙吗?
我想,理解外部联接有点困难。这是一个与学校有关的问题;通常我不会问这里的人,但我似乎无法让它工作。外部联接问题
我有一个表Customer
,其中包括customerID
,和其他客户的信息。 我也有一个名为Orders
的表,其中包括customerID
,买了什么,以及有多少。现在
,我只是想列出谁没有买过东西的所有客户,(也就是说,他们的客户ID不在订单表。)
你能帮忙吗?
取决于你有指标,有办法很少做到这一点:
OUTER JOIN
SELECT a.customerid
FROM customer a
LEFT JOIN orders b
ON (a.customerid = b.customerid)
WHERE b.customerid IS NULL
子集QUERY
SELECT customerid
FROM customer
WHERE customerid NOT IN (SELECT customerid
FROM orders)
差集
SELECT customerid
FROM customer
EXCEPT
SELECT customerid
FROM orders
第一种方法实际上可能是最坏的在性能方面,第三个是我觉得最简单的,但你不能获得关于客户的其他信息,第二个可能是一样的第三在性能方面,而且还可以检索额外的客户信息。
SELECT c.*
FROM Customer c
LEFT JOIN Order o USING (customerID)
WHERE o.customerID IS NULL
在这种情况下不需要使用外连接。试试这个
Select * From Customer Where CustomerId not in (Select CustomerId in Order)
但是为了学习的目的,如何使用它来做同样的事情? – Snowflow
@Snowflow,比你应该尝试nosid的答案。他给出的答案与LEFT JOIN它也被称为左外实现这个连接 –
Select Customer.* From Customer
Left Join Order on Customer.ID = Order.CustomerID
Where Order.CustomerID is Null
基本上可以选择所有的客户他们是否有一个订单或不(直接外连接),然后使用其中过滤掉所有那些已经订购了一些东西。
试试上面的使用和不使用WHERE子句,你会看到它。作为表名,使编写查询一个PIA
PS不使用关键字。
[你尝试过什么?](http://whathaveyoutried.com/) – eggyal
您可以使用外连接来回答这个问题,但我通常觉得在列出所有的客户表,其发现客户的条款ID为'NOT IN',在订单表中找到的客户ID列表中。这是在问题中说明的 - 您应该知道(或了解)关键字IN。 –
外连接语句会是什么样子?因为我的SELECT * FROM Customer LEFT OUTER JOIN Order.customerID ON Customer.customerID显然是错的 – Snowflow