2016-09-26 86 views
0

如何發現哪些訂單沒有詳細信息行?內連接,右連接?計數行

訂單表:訂單(INT),客戶名稱,deliveryDate(日期),價格(十進制)

表詳細信息:detailId(INT),訂單ID(INT),SKU(VARCHAR),數量(INT )

我嘗試(沒有成功):

SELECT 
    COUNT(Details.detailId) AS Tot, 
    Orders.orderId 
FROM Details 
INNER JOIN Orders 
    ON Details.orderId = Orders.orderId 
GROUP BY Details.orderId 
HAVING Tot = 0 

回答

0

嘗試使用LEFT OUTER JOIN join。另見How to retrieve non-matching results in mysql

INNER JOINS從兩個匹配的表中選擇行。其他的一切都將被丟棄,而不是在結果集中,你可以查詢與HAVING

左外連接選擇一排左表(訂單)的每個條目可用。始終爲右表生成一行(詳細信息)。如果找不到匹配的行,則值將爲NULL。我們可以用這個來爲我們帶來優勢,試試:

SELECT Orders.orderId, Details.orderId 
FROM Orders 
LEFT OUTER JOIN Details    -- generate a row for every row in a 
            -- make null if not matching 
ON Details.orderId = Orders.orderId -- match condition 
WHERE Details.orderId IS NULL 
4

如何not innot exists

select o.* 
from orders o 
where not exists (select 1 
        from details d 
        where d.orderId = o.orderId 
       ); 

如果你不希望所有列,然後select要在外部select的人。

0

與外選擇它加入一個檢查,如果訂單ID是空...這樣

SELECT 
    o.* 
FROM orders o 
LEFT OUTER JOIN details d 
    ON d.orderId = o.orderId 
WHERE d.orderId IS NULL