0

我想,我在理解外部联接时遇到了一些问题。这是一个与学校有关的问题;通常我不会在这里问那些,但我似乎无法让它发挥作用。

我有一张桌子Customer,其中包括customerID和其他客户信息。我还有一张名为 的表Orders,其中包括customerID、买了什么以及有多少。

现在,我只想列出所有没有购买任何东西的客户,(即他们的客户 ID 不在Orders表中。)

你能帮我吗?

4

4 回答 4

2
SELECT c.*
FROM Customer c
LEFT JOIN Order o USING (customerID)
WHERE o.customerID IS NULL
于 2012-09-16T14:59:06.033 回答
2

在这种情况下不需要使用外连接。试试这个

Select * From Customer Where CustomerId not in (Select CustomerId in Order)
于 2012-09-16T14:59:25.037 回答
1

根据您拥有的索引,有几种方法可以做到这一点:

外连接

SELECT a.customerid
FROM   customer a
       LEFT JOIN orders b
              ON ( a.customerid = b.customerid )
WHERE  b.customerid IS NULL 

子集查询

SELECT customerid
FROM   customer
WHERE  customerid NOT IN (SELECT customerid
                          FROM   orders) 

设置差异

SELECT customerid
FROM   customer
EXCEPT
SELECT customerid
FROM   orders  

第一种方法实际上在性能方面可能是最差的,第三种是我认为最简单的方法,但是您无法检索有关客户的其他信息,第二种方法在性能方面可能与第三种相同,但您仍然可以检索其他客户信息。

于 2012-09-16T15:10:35.533 回答
1
Select Customer.* From Customer
Left Join Order on Customer.ID = Order.CustomerID
Where Order.CustomerID is Null

基本上,您选择所有客户,无论他们是否有订单(直接外连接),然后使用 where 过滤掉所有订购了东西的客户。

尝试上面有和没有 where 子句的方法,你会看到的。

PS 不要使用关键字作为表名,这使得编写查询成为 PIA。

于 2012-09-16T15:13:16.023 回答