2012-01-16 40 views
4

我想这样一个不折不扣的把如何根据条件值创建mysql查询结果?

ID  Status 
100  Viewed 
103  Not Viewed 
105  Viewed 

这是我的SQL:

select id, status from status_table where ID in (100, 101,102,103,104,105); 

它会显示上述结果,因为在状态表中的其他IDS没有任何条目。 ID is foreign key of another table named as table_file table. It contains in another database. So I cannot join the table due to some performance issue.所以我通过文件ID作为逗号分隔值。但我想要这样的结果我怎样才能创建这个没有使用任何循环。

ID Status 
100 Viewed 
101 Not 
102 Not 
103 Viewed 
104 Not 
105 Viewed 

这可能吗?请帮帮我。

回答

1

你有一张桌子,这些ID是否存在?所以你可以加入它?

SELECT 
    source.ID, 
    status.value 
FROM 
    source 
LEFT JOIN 
    status 
    ON status.id = source.id 
WHERE 
    source.ID in (100, 101,102,103,104,105); 

如果不是,您需要创建一个临时表或内联表(使用这些值)。然后你可以将该表加入你的数据。

EDIT内嵌表的

实施例。有几种方法可以做到这一点,这只是一个。

SELECT 
    source.ID, 
    status.value 
FROM 
    (
    SELECT 100 AS id UNION ALL 
    SELECT 101 AS id UNION ALL 
    SELECT 102 AS id UNION ALL 
    SELECT 103 AS id UNION ALL 
    SELECT 104 AS id UNION ALL 
    SELECT 105 AS id 
) 
    AS source 
LEFT JOIN 
    status 
    ON status.id = source.id 
+0

否我的源表和状态表存在于两个不同的数据库中。所以加入是不可能的。为了解决一些性能问题,我正在重写我的sql。我认为创建表,插入,抓取,最后删除临时表不会给网站带来任何性能改进。 – learner 2012-01-16 11:15:14

+0

@learner - 那么你低估了临时表的速度有多快。但也要考虑内联表格......我现在将编辑为一个例子...... * [另外,请注意,这会按照您的要求回答您的问题;]] * – MatBailie 2012-01-16 11:18:06

0

假设 '不是' ID丢失时,你可以做这样的:

SELECT 
    so.ID, 
    CASE WHEN st.value IS NULL THEN 'Not' ELSE st.value END 
FROM 
    databasename1..source so 
LEFT JOIN 
    databasename2..status st 
    ON st.id = so.id 
WHERE 
    so.ID in (100, 101,102,103,104,105) 

替代databasename1databasename2到真正database names

+0

对不起,我无法加入源表格。请任何其他建议。 – learner 2012-01-16 11:17:22

+0

那我现在说什么呢? – 2012-01-16 11:20:46

相关问题