我想比较SQL表中2个不同列的值。
A ---------------- B
10 -------------- 88
20 -------------- 401
30 -------------- 20
40 -------------- 99
我希望保留第二列的值等于第一列的值(为20),还要包含第一列的值(包含40的401) 。
所以在这个例子中,我会看到一个C列:
A ---------------- B ----------------- C
10 -------------- 88 ---------------- No
20 -------------- 401 -------------- Yes
30 -------------- 20 ---------------- Yes
40 -------------- 99 ---------------- No
实际上,我可以比较同一行中的字段,但不将此比较应用于列中的所有字段。
有可能吗?
由于
答案 0 :(得分:1)
您可以使用嵌套的select
和case
语句执行此操作。嵌套选择使用like
来查看是否存在满足相似性条件的行。请注意,like
如果值相同,并且B
列以A
列开头,则会找到匹配项:
select t.*,
(case when exists (select 1 from table t2 where t1.B like concat(t2.A, '%'))
then 'Yes'
else 'No'
end) as C
from table t;
编辑:
如果通过包含,您希望'1401'
也匹配'40'
,那么like
的模式应为:concat('%', t2.A, '%')
。