我认为我对外连接有一些问题。这是与学校有关的问题;通常我不会问这里的人,但我似乎无法让它工作。
我有一个表Customer
,其中包含customerID
和其他客户信息。
我还有一个名为Orders
的表格,其中包含customerID
,购买的内容以及购买的数量。
现在,我只想列出所有未购买任何东西的客户(即他们的客户ID不在订单表中。)
你能帮忙吗?
答案 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。