2012-04-03 67 views
1

我試圖通過程序來檢查憑證在憑證表內是否有效。基於主表內容的有條件內連接

有一些簡單的驗證方面,例如憑證是否已經過期到期,還有一些憑證可能是基於客戶按品牌或供應商購買特定產品的條件。

所以,我有券

id |  brand  |  supplier | value etc 

表的品牌

id  |  name  etc 

和供應商

id  |  name  etc 

的表的表如果憑證不是具體到一個品牌或供應商,則憑單故事中的值爲0

我已經試過這個Sql查詢內部加入表,但我沒有得到任何結果,我假設這是因爲我試圖使用的憑證代碼(id)不是特定於品牌或供應商?

SELECT *, brands.name as brandName, suppliers.name as supplierName 
    FROM `vouchers` 
    INNER JOIN brands on vouchers.brand = brands.id 
    INNER JOIN suppliers on vouchers.supplier = suppliers.id 
    WHERE vouchers.id= '" & voucherCode & "' 

我怎麼會寫這樣使表brands的加入是在表中的vouchersbrand條件是

我有看大於0(然後simiarly供應商)在這裏看到其他幾個問題,但恐怕我不能完全理解能夠將他們與我的情況聯繫起來的答案。

的方式使用MySQL數據庫:-)

+0

爲什麼要做一個條件連接?使用'LEFT JOIN'而不是'INNER JOIN'。如果您收到空記錄,則表示沒有找到針對特定記錄的結果。然後在您的應用程序中應用邏輯,如果不爲空 - 已發現品牌(如果爲空) - 沒有品牌。不要在數據庫層上使用邏輯。 – 2012-04-03 12:57:41

+0

回答這個問題,只是因爲我用Sql垃圾! – 2012-04-03 14:00:59

回答

1

你爲什麼不只是做一個LEFT JOIN,而不是像這樣:

SELECT *, brands.name as brandName, suppliers.name as supplierName 
    FROM `vouchers` 
    LEFT JOIN brands on vouchers.brand = brands.id 
    LEFT JOIN suppliers on vouchers.supplier = suppliers.id 
    WHERE vouchers.id= '" & voucherCode & "' 

,如果他們有brands這將返回所有vouchers不管或suppliers

+0

@Jamie Hartnoll:記住如果你認爲答案是好的,你可以開心。它給了我們所有溫暖模糊的感覺 – Arion 2012-04-03 14:08:10

0

假設你只想要回有效憑證,請嘗試:

SELECT *, brands.name as brandName, suppliers.name as supplierName 
FROM `vouchers` 
LEFT JOIN brands on vouchers.brand = brands.id 
LEFT JOIN suppliers on vouchers.supplier = suppliers.id 
WHERE vouchers.id= '" & voucherCode & "' and 
     vouchers.brand = coalesce(brands.id, 0) and 
     vouchers.supplier = coalesce(suppliers.id, 0)