0

是否可以进行以下查询

从源 = 2 或目标 = 2 的表中选择 a、b 或 c、d;

如果源 = 2,我想选择 a,b,如果目标 = 2,我想选择 c,d。

SQL 语句可以做到这一点吗?

4

4 回答 4

4

我假设您有一个名为“数据库”的表(表的一个糟糕的名称),它看起来像这样:

  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。

于 2013-06-18T10:20:34.507 回答
3

你可以:

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
于 2013-06-18T10:16:59.977 回答
2
select a,b
from database
where source = 2

union

select c,d
from database
where target = 2

对于工作示例检查这里

于 2013-06-18T10:23:37.947 回答
1

这个怎么样:

select a,b,c,d from (select a,b from database where source=2 UNION select c,d from database where target=2)
于 2013-06-18T10:24:29.943 回答