发布网友 发布时间:2022-04-22 02:35
共3个回答
热心网友 时间:2022-04-08 00:03
SELECT a.id,
a.name,
a.dept,
CASE
WHEN (SELECT COUNT (1) cnt
FROM b
WHERE a.name = b.name AND b.TYPE <> '03') > 0
THEN
0
ELSE
1
END
flag
FROM a
不过还需要考虑一个问题就是:如果B表中找不到记录时,flag如何赋值。
上面这个sql针对这个情况会赋值1追问
你好,我修改了你说的语句, 这样应该就是判断是否全部是 03了。或者只有部分或者B表没有数据。 那这样岂不是要慢成翔? 请问我这样写可以优化吗?
热心网友 时间:2022-04-08 01:21
select a.id,a.name,a.dept, decode(b2.name,NULL,1,0) as flag
from A a join B b1
on a.name=b1.name and b1.type='03'
left join B b2
on a.name=b2.name
where b2.type!='03'
没环境测试,大概就是这么个逻辑
先根据name查出结果,然后判断B表中有没有03的,没有就显示1,有就显示0
热心网友 时间:2022-04-08 02:56
select a.id,a.name,a.dept||' 1' from a where name in (
select distinct a.name from a,b where a.name=b.name and b.type<>3)
union all
select a.id,a.name,a.dept||' 0' from a where name not in (
select distinct a.name from a,b where a.name=b.name and b.type<>3);
试试可以不?