SELECT <A OR B> FROM my_table WHERE A=5 OR B=5;
の値(A、B)があると言う:SELECT <A OR B> FROM my_table WHERE A = 5またはB = 5;
1,5
2,5
5,3
5,4
SELECT
の結果は言い換える
1
2
3
4
なければならないIよりも(他の他の列の値を必要とします1つは、WHERE
によって見つけられる)。あなたのデータベースを想定し
SELECT <A OR B> FROM my_table WHERE A=5 OR B=5;
の値(A、B)があると言う:SELECT <A OR B> FROM my_table WHERE A = 5またはB = 5;
1,5
2,5
5,3
5,4
SELECT
の結果は言い換える
1
2
3
4
なければならないIよりも(他の他の列の値を必要とします1つは、WHERE
によって見つけられる)。あなたのデータベースを想定し
A
とB
両方が数値ですと仮定すると、私は解決策を疑問に思いますCASE
,UNION
(いずれも一般的な解決策)またはこのようなクエリを使用すると、より高速に動作します。
SELECT (A + B - 5) AS OtherValue
FROM Table
WHERE A = 5
OR B = 5;
ニースですが、数値データの場合にのみ有効ですが、もちろんケース/ユニオンソリューションはより一般的です。 –
case式をサポートし、同じデータ型の両方A
とB
あると仮定すると - これは動作するはずです:
SELECT CASE WHEN A = 5 THEN B ELSE A END AS OtherValue
FROM Table
WHERE A = 5
OR B = 5;
あなたはこれを試すことができます:場合
SELECT
CASE WHEN a = 5 THEN b
ELSE a
END AS AorB
FROM my_table
WHERE a = 5 OR b = 5
がありますあなたのSQLの方言にはCASE
がありません。ただし、行の順序は保持されません。
SELECT b AS AorB FROM my_table WHERE a = 5
UNION ALL
SELECT a AS AorB FROM my_table WHERE b = 5
このクエリでは、結果セットに重複した値が明示的に設定されています。異なる値を表示する場合は、ALL
を省略してください。
テーブルの順序が本質的に順序付けられていないため、行の順序は関係なくです。私は組合がすべて解決するのが好きです。 –
適切なインデックスを持つ大きなテーブルの場合、UNION ALLアプローチはより良い実行計画を与える可能性があります。 – MatBailie
@ ZoharPeledそれは本当です。明示的な 'ORDER BY'を追加しないと、順序は定義されません。私の経験からは、 "自然な"ソート順はプライマリキーによって決まります。しかし、私は決してそれに頼るつもりはない。 –
あなたは非常に読みやすいクエリを探しているなら、UNION
を使用します。
select a from my_table where b = 5
union
select b from my_table where a = 5;
...重複する値が許されない限り、' UNION ALL'を使う必要があります。 –
1,5や5,1のような重複がありますか?もしそうなら、1を1回または2回表示したいですか? –