同じテーブルにある複数の列から一意のNULL以外の値を返す単一のSQL文を作成しようとしています。例えば同じテーブル内の複数の列から異なる値を選択
SELECT distinct tbl_data.code_1 FROM tbl_data
WHERE tbl_data.code_1 is not null
UNION
SELECT tbl_data.code_2 FROM tbl_data
WHERE tbl_data.code_2 is not null;
、tbl_dataは以下の通りである:AB、BC、DE:
id code_1 code_2
--- -------- ----------
1 AB BC
2 BC
3 DE EF
4 BC
を上記の表は、SQLクエリは、2つの列、すなわち、からすべての一意の非NULL値を返すべき、EF。
私はかなり新しいSQLです。上記の私のステートメントは動作しますが、カラムが同じテーブルから来ているので、このSQL文を書くためのよりきれいな方法がありますか?
SELECT derivedtable.NewColumn
FROM
(
SELECT code_1 as NewColumn FROM tbl_data
UNION
SELECT code_2 as NewColumn FROM tbl_data
) derivedtable
WHERE derivedtable.NewColumn IS NOT NULL
UNION
はすでに複合クエリーからDISTINCTの値を返します。
そのテーブル構造はあなたのDBが正規化されていないと感じています... – gdoron
最初のクエリで 'distinct'は必要ありません - ' union'がそれを行います。 – Blorgbeard
@ gdoron:コードは、実際に繰り返すことができる様々な指定に対応しており、すなわち特定のレコードはコード1および2に対してBCおよびBCを有することができる。コード1対2の指定もまた重要である。様々なコードの第3のテーブルルックアップテーブルがある。最高ではありませんが、それが私が扱っているものです。 – regulus