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次还是两次? –