我需要在另一列上使用两个条件来提取列的不同元素。例如:
c1 | c2
---------
u | a
v | b
w | c
x | a
x | b
x | c
y | a
y | c
当c2包含' a'时,我想要c1的条目但不是' b'返回的名称应该是' u'并且' y'。
感谢任何帮助,谢谢。
答案 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%'