用或选择SQL选择值

时间:2013-06-18 10:06:37

标签: sql postgresql

是否可以进行以下

的查询
  

从表中选择a,b或c,d,其中source = 2或target = 2;

我想选择a,b如果source = 2或c,则d,如果target = 2。

这可以用SQL语句吗?

4 个答案:

答案 0 :(得分:4)

我假设你有一个名为'database'的表(一个表的可怕名称),它看起来像这样:

  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 |      |     

根据需要,只返回a和b,其中source = 2,并返回c和c,其中target = 2。

答案 1 :(得分: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

答案 2 :(得分:2)

select a,b
from database
where source = 2

union

select c,d
from database
where target = 2

对于工作示例检查Here

答案 3 :(得分:1)

这个怎么样:

select a,b,c,d from (select a,b from database where source=2 UNION select c,d from database where target=2)