2015-04-23 67 views
-3

我在查找以下SQL代碼:SQL - 未付款的客戶

顯示尚未付款的客戶的訂單編號。

注意:有客戶,訂單和付款表。客戶ID不在付款表中。

感謝您的幫助!

+2

你爲什麼不能做自己?一個特定的問題?您當前的查詢出錯? –

+0

你有多遠? 'SELECT o.orderID FROM orders o'? – spencer7593

+0

我對SQL很陌生,所以我幾乎失去了。如果你需要我,我會在這裏放些東西,但它可能不對。 –

回答

0

你還沒有付出太多的努力。

select id 
    from orders o 
    left join payments p 
     on p.order_id = o.id 
    where p.order_id is null 

假設我有關係吧,這會給你所有的訂單已經沒有對他們支付的款項。

+0

非常感謝! –

0

聽起來像你可以使用反連接模式,例如,

SELECT o.orderID 
    FROM orders o 
    LEFT 
    JOIN payments p 
    ON p.orderID = o.orderID 
WHERE p.orderID IS NULL 

,說從orders獲得所有的行,匹配payments一起。如果有orders其中沒有匹配的payments,則orders的行將與NULL值一起返回,替代payments中的「缺失」行。 (關鍵字之前的關鍵字LEFTJOIN告訴MySQL做一個「外部連接」,即使表中沒有匹配的行,也會返回左側表中的所有行(否則將滿足謂詞)在右側)。

的「絕招」是WHERE子句,我們丟棄orderspayments有一個匹配行的任何行的謂語,留給我們orders沒有任何匹配payments

還有其他的查詢模式可以達到相同的結果,例如, NOT IN (subquery)NOT EXIST (correlated subquery)

例如:

SELECT o.orderID 
    FROM orders o 
    WHERE o.orderID NOT IN 
     (SELECT p.orderID 
      FROM payments p 
      WHERE p.orderID IS NOT NULL 
     ) 

- 或 -

SELECT o.orderID 
    FROM orders o 
    WHERE NOT EXISTS 
     (SELECT 1 
      FROM payments p 
      WHERE p.orderID = o.orderID 
     ) 
+0

我會盡快做到這一點,並張貼我的評論,非常感謝! –

+0

再次感謝您的真正快速反應,並真正教會我一些東西!這是我...'選擇Order_t.OrderID FROM Orders_t LEFT JOIN ON Payment_t.OrderID = Order.OrderID WHERE IS Payment_t.OrderID Payments_t NULL' –