SQL:在一列上选择使用两个条件

时间:2017-09-02 03:52:04

标签: sql

我需要在另一列上使用两个条件来提取列的不同元素。例如:

c1  |  c2  
---------
u   |  a
v   |  b
w   |  c
x   |  a
x   |  b
x   |  c
y   |  a
y   |  c

当c2包含' a'时,我想要c1的条目但不是' b'返回的名称应该是' u'并且' y'。

感谢任何帮助,谢谢。

3 个答案:

答案 0 :(得分:3)

在概念上最简单的方法可能是在c1列上进行汇总,并断言a存在且b不存在:

SELECT c1
FROM yourTable
GROUP BY c1
HAVING
    SUM(CASE WHEN c2 = 'a' THEN 1 ELSE 0 END) > 0 AND
    SUM(CASE WHEN c2 = 'b' THEN 1 ELSE 0 END) = 0

答案 1 :(得分:1)

这不是SQL擅长的,所以它有点笨拙。这种天真的实现相当普遍,并且在大多数方言下都应该稍作修改。

在DB2中,您可能需要在内部查询中添加“with ur”以防止锁定。

select c1 from yourtable
where c2 = 'a'
  and c1 not in (
    select c1 from yourtable where c2 = 'b'
  )

答案 2 :(得分:0)

SELECT DISTINCT t.c1
FROM table as t
WHERE 
t.c2 LIKE '%a%'
AND NOT t.c2 LIKE '%b%'