2015-05-18 39 views
0

我會盡我所能地嘗試和解釋這一點,我不知道我是否會做得很好。 我需要執行一個INNER JOIN。我有一幫「和」檢查,是這樣的:SQL執行一個內部連接,但需要根據特定值進行不同的查詢

INNER JOIN lineItem cli ON acty.organization_id = cli.organization_id 
AND acty.wkstn_id = cli.wkstn_id 
AND acty.loc_id = cli.loc_id 

但是,當涉及到一定的值,如果它等於一定值時,我想執行另一項檢查。

基本上是這樣的(僞代碼)

If 
acty.item_status = 'MODIFIED' 

以下行添加到「AND的」列表

AND acty.trans_seq = 1 

If 
    acty.item_status != 'MODIFIED' 

然後將下面的行添加到「AND的」

名單
AND acty.trans_seq = 2 

我該如何在SQL查詢中執行此操作?

回答

1

下面是一個使用布爾邏輯的解決方案:

INNER JOIN lineItem cli 
ON acty.organization_id = cli.organization_id AND 
    acty.wkstn_id = cli.wkstn_id AND 
    acty.loc_id = cli.loc_id AND 
    ((acty.item_status = 'MODIFIED' AND acty.trans_seq = 1) OR 
    (acty.item_status <> 'MODIFIED' AND acty.trans_seq = 2) 
    ) 
0

這個邏輯

If acty.item_status = 'MODIFIED' 
Add the following line to the list of "AND's" 
AND acty.trans_seq = 1 

你可以改變

(acty.item_status = 'MODIFIED' AND acty.trans_seq = 1) 

acty.item_status != 'MODIFIED' 
Then Add the following line to the list of "AND's" 
AND acty.trans_seq = 2 

你可以改變

(acty.item_status <> 'MODIFIED' AND acty.trans_seq = 2) 

兩個表達式,你可以加入使用OR運營商 - 因爲只有條件的一個可以實現的。 完整的代碼應該是這樣的:

INNER JOIN lineItem cli ON acty.organization_id = cli.organization_id 
AND acty.wkstn_id = cli.wkstn_id 
AND acty.loc_id = cli.loc_id 
AND ((acty.item_status = 'MODIFIED' AND acty.trans_seq = 1) 
    OR (acty.item_status <> 'MODIFIED' AND acty.trans_seq = 2)) 
相關問題