テーブルの一部の列を条件付きで選択しようとしています。
私のテーブルの構造は奇妙に見える可能性があり、私はそれに影響を及ぼさない:条件付きでテーブルの一部を選択します。
| id | col1|1 | col2|1 | col1|2 | col2|2 | col1|3 | col2|3 |
|:--:|:------------:|:------------:|:------------:|:------------:|:------------:|:------------:|
| 1 | some | meaningless | text | don't | mind | me |
| 2 | abc | def | NULL | NULL | my | text |
| 3 | dummytext... | dummytext... | dummytext... | dummytext... | dummytext... | dummytext... |
このテーブルは終わり|X
でマークされた3つの部分に分割されます。
col1|1
とcol2|1
col1|2
とcol2|2
col1|3
とcol2|3
その一部IS NOT NULL
のcol2
場合、私は、各パートをしたいです。
これは私のアプローチです:作品場合は、すべてのcol2
はNOT NULL
が、それらIS NULL
の1場合は、全体の結果が空の場合にのみ
SELECT t1.`col1|1`, t1.`col2|1`, t2.`col1|2`, t2.`col2|2`, t3.`col1|3`, t3.`col2|3`
FROM tab1 t1
LEFT JOIN tab1 t2 On t1.`id` = t2.`id`
LEFT JOIN tab1 t3 on t1.`id` = t3.`id`
WHERE
t1.`col2|1` IS NOT NULL
AND t2.`col2|2` IS NOT NULL # this column is NULL, so I don't want it (including table t2)
AND t3.`col2|3` IS NOT NULL
AND t1.`id` = 2
AND t2.`id` = 2
AND t3.`id` = 2
。
例の表にNULL
の値を置き換えた場合、この場合はNULL
になることはないため、6列すべてを取得できます。私の例では
、私はその出力をしたい:
| col1|1 | col2|1 | col1|3 | col2|3 |
|:------:|:------:|:------:|:------:|
| abc | def | my | text |
なぜLEFT JOINを捨てて、右側のテーブルにNULLがないことを確認しますか?代わりにINNER JOINが必要なようです。 – jarlh
サンプル入力セット全体に対して望ましい出力を投稿できますか?動的な列数を求めているようです。 – Shruti
'SELECT'クエリは、固定された列とその名前を指定します。結果セットに不確定な数の列が必要な場合は、動的SQLを使用する必要があります。 –