2012-01-16 76 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

相關問題