2015-10-06 215 views
0

我有兩個表,我試圖查詢並使用左連接來獲取結果。問題是我的查詢沒有返回任何記錄。查詢不返回結果,左連接

我的第一個表中有我所有的藝術家:

藝術家

id | name 
------------------------ 
4 Damien Rice 
5 John Mayer 
6 Pink Floyd 

我的第二個表有所有的藝術家流派的

ArtistGenre

id | artist_id | genre_name 
------------------------ 
7  6   Jam 
17 6   Rock 
16 6   Blues 

我的查詢,但它沒有返回任何結果。

SELECT a.*, ag.* 
FROM  Artist a 
LEFT JOIN ArtistGenre ag 
ON  ag.artist_id=a.id 
WHERE  a.id IS NOT NULL 
AND  ag.id IN (7,17,16) 

我在做什麼錯了?

回答

0

where條件轉換left joininner join(因爲不匹配行具有用於ag.id一個的NULL值失敗IN)。移動第二個條件的on條款:

SELECT a.*, ag.* 
FROM Artist a LEFT JOIN 
    ArtistGenre ag 
    ON ag.artist_id = a.id AND ag.id IN (7, 17, 16) 
WHERE a.id IS NOT NULL; 
+0

這最終返回所有的藝術家,而不僅僅是藝術家「平克·弗洛伊德」(ID 6)。 – LargeTuna

+0

@LargeTuna。 。 。你的問題沒有說明你想要做什麼。它實際上只是顯示了一個將左連接變成內連接的查詢。這似乎是這種情況下的明顯問題。 –

+0

對不起,我只想返回任何有匹配流派「IN」7,17,16的藝術家。在這種情況下,它只會是藝術家ID 6誰是粉紅色弗洛伊德 – LargeTuna