2014-02-26 82 views
0

在stackoverflow上發佈的問題與我的問題幾乎相同,但我找不到任何工作解決方案。我有一個表消息和項目有:MYSQL IN子句問題

id | Message | Status 
1 | Hello | 1 
2 | Hiiii | 0 
4 | Works | 1 

我還有一個表,它給出的ID 1,2,3和我想從消息表發現所有這些條目的狀態。我想要的是,如果一個ID不存在於消息表中,那麼如果我使用IN子句來查找所有狀態,那麼它應該爲該ID返回空值。我想要以下結果:

id | Status 
1 | 1 
2 | 0 
3 | null 

我一直在使用IN子句,但沒有得到工作輸出。然後我得到了一個解決方案在stackoverflow並試圖這個查詢

SELECT `id`,`status` FROM (SELECT 1 AS ID UNION ALL SELECT 2 AS ID UNION ALL SELECT 3) ids LEFT OUTER JOIN message ON ids.ID = message.id 

但這個查詢沒有給出預期的結果。任何幫助將非常感激。

回答

2

我看不出您的查詢會如何工作。 id列在select中應該不明確(除非數據庫區分大小寫)。試試這個:

SELECT ids.ID, m.status 
FROM (SELECT 1 AS ID UNION ALL SELECT 2 AS ID UNION ALL SELECT 3 
    ) ids LEFT OUTER JOIN 
    message m 
    ON ids.ID = m.id; 
+0

感謝您的支持。但是,當我在查詢結尾處添加ORDER BY FIELD(ids.ID,3,1,2)時,它不會以3,1,2順序給出結果。對此有何幫助? –

+0

您的'order by'子句應該可以工作。您是否在'from'子句的末尾刪除了分號? –

+0

不,我沒有刪除。這是按字段順序,因爲我希望輸出的順序與我在我的評論中發佈的順序相同,即3,1,2 –