2015-10-07 54 views
1

聯接所以我有一個加入了e.g讓說我需要有OR條件

SELECT a.id FROM tableA as a 
    JOIN tableB as b on a.id=b.aid 
    JOIN tableC as c on (c.aid != a.id or ???) and a.name = 'fedex' and b.user = 'employee' and c.enabled=true 

???是,如果C不包含a.id我仍希望該結果包含結果

我想左外連接,但沒有這樣的伎倆

順便說一句,即使我有一個單記錄在表c中,然後這個查詢工作正常。如果表c爲查詢失敗時爲空。

+0

你有沒有考慮過'RIGHT JOIN'? – CollinD

+0

這不就是'LEFT JOIN'嗎?或者'LEFT OUTER JOIN'是同樣的東西? –

+0

@RocketHazmat在這種情況下它幾乎是一樣的。我也嘗試了他們兩個。 –

回答

1

您正在描述什麼是LEFT JOIN。那麼,你試過這個嗎?

SELECT a.id 
FROM tableA a JOIN 
    tableB b 
    on a.id = b.id LEFT JOIN 
    tableC c 
    on c.id = a.id; 

當然,你的查詢是如此簡單,你甚至不似乎需要TableC。這將返回的a.id同一組:

SELECT a.id 
FROM tableA a 
WHERE a.id IN (SELECT b.ID FROM tableB b) 

唯一的區別是,你的版本可能會產生重複。

+0

我試過了,它在表c中有數據時工作正常,否則沒有任何返回。 –

+0

即,當tableC爲空時,它不返回任何行 –

+0

即使當「tableC」爲空時,第一個查詢也應該返回行。還有其他一些事情正在發生,比如你在問題中沒有包括「where」條款。 –

0
SELECT a.id FROM tableA as a 
JOIN tableB as b on a.id = b.aid and b.user = 'employee' 
LEFT JOIN tableC as c on c.aid != a.id and a.name = 'fedex' and c.enabled=true