2017-01-09 6 views
1

MySQL(またはSQL一般)では、あらかじめ定義された識別子のリストを生成し、一致するテーブルデータと結合できますか?テーブルデータで事前定義された、存在しないキーに結合する

のはmy_tableそれを呼びましょう、例えば、次の表のデータを取る:

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

は今、私は可能なid値のリストを持っているし、一緒に参加したデータと、これらの値の完全なリストを取得したいと思います上記の表から。リスト[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)利回りのようなクエリが2つのだけの行(値「A」と「C」)のためになります。解決のために

、私はそのような

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

として、idを([1, 2, 3, 4])の完全なリストを供給し、テーブルデータであることを参加左、一時テーブルのいくつかのフォームの線に沿って考えています。しかしそれ、どうやったら出来るの?

これも可能ですか?あるいは、結果を外部コードの最初のリストと比較することが本当に必要なのでしょうか? (これは可能ですが、私の場合のように自明ではなく、識別子は整数ではありません)

(これの究極のアイデアは、すべての入力IDを持つDBの結果セットが欲しいということです。簡単に非既存のレコードを識別)


がアップデート:私はそれが問題に帰着推測:どのように私は(私の)SQLサーバから結果は、このような

id 
--- 
1 
2 
3 
4 

として設定し取得することができますはこれを何らかのテーブルのデータとして持っていませんが、いくつかのクエリでデータを設定することからですか?

答えて

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のリストが長すぎない限り動作します(これは私の場合です)。

誰かがより良い解決策ですか?

関連する問題