2015-08-25 64 views
0

我有三個表customersorderspaymentsmysql的多連接查詢未返回所需的輸出中

我試圖讓紀錄內與他不同的命令,他用對訂單付款方式加盟客戶。

例如

customer_name Order_status Payment_method 
David   shipped  CASH 
David   cancelled  CHEQUE 

當我運行查詢它重複記錄三次,結果還沒有我在例如上面提到。

這是查詢結果。

SELECT cust_name 
     , order_status 
     , pay_method 
    FROM customer 
    INNER JOIN order_tbl ON customer.cust_id = order_tbl.cust_id 
    INNER JOIN payments ON payments.cust_id = order_tbl.cust_id 

我的查詢是否正常,或者我需要提及我的db結構嗎?

+0

如果您喜歡,請考慮遵循以下簡單的兩步操作步驟:1.如果您尚未這樣做,請提供適當的DDL(和/或sqlfiddle),以便我們可以更輕鬆地複製問題。 2.如果您尚未這樣做,請提供與步驟1中提供的信息相對應的所需結果集。 – Strawberry

+0

add DISTINCT ... – Randy

+0

我已經在示例的頂部提供了期望的結果 – mohsin

回答

2

您錯過了那裏的關係。你的orderspayments需要以某種方式連接在一起,我假設兩個表中應該有一個order_id列?

SELECT cust_name 
    , order_status 
    , pay_method 
FROM customer 
     INNER JOIN order_tbl 
      ON customer.cust_id = order_tbl.cust_id 
     INNER JOIN payments 
      ON payments.cust_id = order_tbl.cust_id 
      AND payments.order_id = orders_tbl.order_id --<<--- this line here is missing 

如果您沒有這種鏈接,您如何在邏輯上將付款鏈接到訂單 - 因爲那將是您錯過的鏈接。

+0

請你能告訴我如何使我的自我強大的關係,有沒有任何網站,具體教SQL關係 – mohsin

0

您正在獲取重複記錄,因爲條件匹配,MySQL沒有錯,它會根據您提出的問題返回結果。你是否檢查過重複記錄的ID以確保它們不同?這可能是具有不同付款ID的相同記錄,因此它肯定會返回與存在關係的每條記錄相關的客戶和訂單記錄。如果您想根據某些條件使查詢不同,則可以使用DISTINCT(THE_FIELD)

根據您提供的信息,我接受的項目知識有限。如上面評論所述,更多信息會得到更好的答案。

+0

DB結構:客戶表:cust_id,cust_name,cust_city。訂單表:order_id,order_status,cust_id。 Paymens表:pay_id,cust_id,pay_method,金額,order_id – mohsin

+0

DISTINCT甚至沒有顯示正確的結果 – mohsin

0

您必須錯過使用order_tbl的主鍵來加入第三個表。