2017-01-09 40 views
1

在MySQL(或SQL在普通),是有可能產生預先定義的標識符的列表,可能不存在的鍵與匹配表數據連接?與連接的數據連結預定義,與表數據

id | value 
---+------ 
1 | 'a' 
3 | 'c' 

現在,我有可能id值的列表,並希望得到這些值的完整列表,一起:

就拿下面的表中的數據,姑且稱之爲my_table從上面的表格。與列表[1, 2, 3, 4],期望的結果是:

item | id | value 
-----+------+------ 
    1 | 1 | 'a' 
    2 | NULL | NULL 
    3 | 3 | 'c' 
    4 | NULL | NULL 

顯然,像SELECT * FROM my_table WHERE id IN (1, 2, 3, 4)產量的查詢只導致兩行(值 'a' 和 'c')中。

解決的辦法,我沿着某種形式的臨時表的思路,用的ID([1, 2, 3, 4])的完整列表,美聯儲和左側的接合部,與表中的數據,如

SELECT t1.`item`, t2.`id`, t2.`value` 
FROM 
    ... 
AS t1 
LEFT JOIN `my_table` AS t2 ON t2.`id` = t1.`item` 

但我怎麼做?

這甚至可能嗎?還是真的有必要將結果與外部代碼中的初始列表進行比較? (這將是可能的,但不是小事在我的情況下,標識不是整數)

(這樣做的最終想法是,我想從數據庫中設置的所有輸入ID的結果讓我能輕鬆識別不存在的記錄)


更新:我想它歸結爲一個問題:我如何能得到如

id 
--- 
1 
2 
3 
4 

從(我的)SQL服務器結果集無需此如在一些表數據,但從一些查詢中設置數據?

回答

0

一種新的方法閃入我的腦海裏......使用union

SELECT t1.`item`, t2.`id`, t2.`value` 
FROM (
    select 1 as `item` 
    union select 2 
    union select 3 
    union select 4 
    ) AS t1 
LEFT JOIN `my_table` AS t2 ON t2.`id` = t1.`item` 

它回答的問題,但它仍然有待觀察這是否是「最好」的答案。它只要item是清單不是太長(這是這種情況對我來說)的作品。

任何一個更好的解決方案?