0

こんな問い合わせが来ました

Select * from tablename where field1 in (a,b,c,d);

要素が見つからない場合、dbms がこの要素のすべてのフィールドを null で返す方法があるかどうかを知りたい

+-------+-------+-------+
|field_1|field_2|field_3|
+-------+-------+-------+
|a      |1      |4      |
+-------+-------+-------+
|b      |null   |null   |
+-------+-------+-------+
|c      |4      |5      |
+-------+-------+-------+
4

1 に答える 1

0

使用しているデータベース ソフトウェアは指定しませんが、一時テーブルを作成し、必要な値を追加して、ソース テーブルに左結合することができます。

CREATE TABLE #temp (field1 VARCHAR(10))

INSERT INTO #temp VALUES ('a')
INSERT INTO #temp VALUES ('b')
INSERT INTO #temp VALUES ('c')
INSERT INTO #temp VALUES ('d')

SELECT t1.field1, t2.field2, t2.fields
FROM #temp t1
LEFT JOIN tablename t2 ON t1.field1 = t2.field1

もう 1 つの方法は UNION です。

Select * from tablename where field1 in (a,b,c,d)
UNION 
SELECT 'a', null, null, null WHERE 'a' NOT IN (select field1 FROM tablename)
UNION 
SELECT 'b', null, null, null WHERE 'b' NOT IN (select field1 FROM tablename)
UNION 
SELECT 'c', null, null, null WHERE 'c' NOT IN (select field1 FROM tablename)
UNION 
SELECT 'd', null, null, null WHERE 'd' NOT IN (select field1 FROM tablename)

'a'(値、'b'、が既存のテーブルに存在しないと想定しています。それ以外の場合は、一時テーブルの例のようなそのテーブルだけ'c'です。)'d'LEFT JOIN

于 2014-01-20T20:36:08.230 に答える