外加入问题

时间:2012-09-16 14:51:50

标签: mysql

我认为我对外连接有一些问题。这是与学校有关的问题;通常我不会问这里的人,但我似乎无法让它工作。

我有一个表Customer,其中包含customerID和其他客户信息。 我还有一个名为Orders的表格,其中包含customerID,购买的内容以及购买的数量。

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

你能帮忙吗?

4 个答案:

答案 0 :(得分:2)

SELECT c.*
FROM Customer c
LEFT JOIN Order o USING (customerID)
WHERE o.customerID IS NULL

答案 1 :(得分:2)

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

Select * From Customer Where CustomerId not in (Select CustomerId in Order)

答案 2 :(得分:1)

根据您拥有的索引,有几种方法可以执行此操作:

外部加入

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

SUBSET QUERY

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

设置差异

SELECT customerid
FROM   customer
EXCEPT
SELECT customerid
FROM   orders  

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

答案 3 :(得分:1)

Select Customer.* From Customer
Left Join Order on Customer.ID = Order.CustomerID
Where Order.CustomerID is Null

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

使用和不使用where子句尝试上述内容,你会看到它。

PS不使用关键字,因为表名会使查询成为PIA。