次の表があるとしましょう:
ID, Name
1, John
2, Jim
3, Steve
4, Tom
次のクエリを実行します
SELECT Id FROM Table WHERE NAME IN ('John', 'Jim', 'Bill');
私は次のようなものを得たいです:
ID
1
2
NULL or 0
出来ますか?
探している名前のサブクエリを作成することから始め、サブクエリをテーブルに結合したままにします。
_SELECT myTable.ID
FROM (
SELECT 'John' AS Name
UNION SELECT 'Jim'
UNION SELECT 'Bill'
) NameList
LEFT JOIN myTable ON NameList.Name = myTable.Name
_
これは、見つからない名前ごとにnull
を返します。代わりにゼロを返すには、_SELECT myTable.ID
_の代わりにSELECT COALESCE(myTable.ID, 0)
でクエリを開始します。
SQL Fiddle here があります。
これはどう?
SELECT Id FROM Table WHERE NAME IN ('John', 'Jim', 'Bill')
UNION
SELECT null;
質問は少しわかりにくいです。 「IN」はSQLで有効な演算子であり、任意の値との一致を意味します( here を参照)。
SELECT Id FROM Table WHERE NAME IN ('John', 'Jim', 'Bill');
次と同じです:
SELECT Id FROM Table WHERE NAME = 'John' OR NAME = 'Jim' OR NAME = 'Bill';
あなたの答えでは、あなたは順番に各値の返信が欲しいようです。これは、結果をUNION ALLに結合することで実現されます(UNIONのみが重複を排除し、順序を変更できます)。
SELECT max(Id) FROM Table WHERE NAME = 'John' UNION ALL
SELECT max(Id) FROM Table WHERE NAME = 'Jim' UNION ALL
SELECT max(Id) FROM Table WHERE NAME = 'Bill';
上記は、一致する場合は1 Id(最大)を返し、一致しない場合はNULLを返します(Billなど)。一般に、リスト内の名前のいくつかに一致する複数の行を持つことができることに注意してください。私は「max」を使用して1つを選択します。 、Name)テーブルのIDのリストを作成してから使用する代わりに、データベース内の他のテーブルと結合します。