2014-02-26 67 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 –