2016-09-26 4 views
0

どの注文に詳細行がないのかを知るにはどうすればいいですか?内部結合、右結合?行を数える

表注文:注文ID(INT)、CUSTOMERNAME、deliveryDate(日付)、価格(10進数)

表詳細: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一致する2つのテーブルの行を選択します。他のすべてが破棄され、その結果では利用できませんが、あなたがHAVING

LEFT OUTERはに参加して問い合わせることができるように設定し(受注)左の表の各エントリの行を選択します。常に正しい表の行を生成します(詳細)。一致する行が見つからない場合、値は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 inまたはnot exists

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

あなたが外selectにしたいselectもの、その後、すべての列をしたくない場合。

0

注文IDがnullの場合、外この

のような...チェックに参加
SELECT 
    o.* 
FROM orders o 
LEFT OUTER JOIN details d 
    ON d.orderId = o.orderId 
WHERE d.orderId IS NULL