SELECT <A OR B> FROM my_table WHERE A=5 OR B=5;
說出值(A,B)爲:SELECT <A OR B> FROM my_table其中A = 5或B = 5;
1,5
2,5
5,3
5,4
的SELECT
結果應該是
1
2
3
4
換句話說,我需要與其它列的值(比其它一個由WHERE
發現)。
SELECT <A OR B> FROM my_table WHERE A=5 OR B=5;
說出值(A,B)爲:SELECT <A OR B> FROM my_table其中A = 5或B = 5;
1,5
2,5
5,3
5,4
的SELECT
結果應該是
1
2
3
4
換句話說,我需要與其它列的值(比其它一個由WHERE
發現)。
假設都A
和B
是數值,我不知道哪個解決方案使用CASE
,UNION
(兩者都是通用解決方案)或者像這樣的查詢:
SELECT (A + B - 5) AS OtherValue
FROM Table
WHERE A = 5
OR B = 5;
不錯,雖然這隻適用於數字數據,當然...案例/聯盟解決方案更一般。 –
假設你的數據庫支持的情況下表達,並假設兩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 solution。 –
對於具有適當索引的大表,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次還是兩次? –