是否可以进行以下查询
从源 = 2 或目标 = 2 的表中选择 a、b 或 c、d;
如果源 = 2,我想选择 a,b,如果目标 = 2,我想选择 c,d。
SQL 语句可以做到这一点吗?
是否可以进行以下查询
从源 = 2 或目标 = 2 的表中选择 a、b 或 c、d;
如果源 = 2,我想选择 a,b,如果目标 = 2,我想选择 c,d。
SQL 语句可以做到这一点吗?
我假设您有一个名为“数据库”的表(表的一个糟糕的名称),它看起来像这样:
a | b | c | d | source | target
------+------+------+------+--------+--------
11 | 22 | 33 | 44 | 1 | 2
111 | 222 | 333 | 444 | 2 | 2
1111 | 2222 | 3333 | 4444 | 2 | 1
然后,您可以像这样查询它:
select
case when source=2 then a else null end as a,
case when source=2 then b else null end as b,
case when target=2 then c else null end as c,
case when target=2 then d else null end as d
from database;
并得到这个结果:
a | b | c | d
------+------+------+------
| | 33 | 44
111 | 222 | 333 | 444
1111 | 2222 | |
根据需要,source=2 的地方只返回 a 和 b,target=2 的地方只返回 c 和 c。
你可以:
http://www.postgresql.org/docs/7.4/static/functions-conditional.html
像这样的语句应该做你想要的,虽然我没有 postgresql 来测试:
SELECT CASE
WHEN source = 2 THEN a, b
WHEN target = 2 THEN c, d
ELSE 0
END
select a,b
from database
where source = 2
union
select c,d
from database
where target = 2
对于工作示例检查这里
这个怎么样:
select a,b,c,d from (select a,b from database where source=2 UNION select c,d from database where target=2)