【发布时间】:2020-08-20 06:40:40
【问题描述】:
我的查询如下,当 query2 有 rowdata 时,我想从 query1 中减去一些行,但我不知道该怎么做:
我的查询:
with query1 as(
select wm_concat(linkman_name) name,
wm_concat(phone_num) phone,
t.org_id
from (
select linkman_name, phone_num, LINK_ORG_ID, org_id
from TD_SM_LINKMAN
where STATE = '2'
and (LINK_ORG_ID is null or LINK_ORG_ID = '')) t
group by t.org_id) ,
query2 as(
select wm_concat(linkman_name) name,
wm_concat(phone_num) phone,
org_id
from (select linkman_name, phone_num, LINK_ORG_ID, org_id
from TD_SM_LINKMAN
where STATE = '2'
and (LINK_ORG_ID = '55')) t
group by org_id)
select *
from query1
union all
select *
from query2 minus
-- this doesn't work ,i want to minus the rowdata from query 1 when query1.org_id = query2.org_id. the query2 is marked as outer query column.
(select * from query1 where query1.ORG_ID = query2.ORG_ID)
;
样本表
name phone link_org_id org_id
lily 133 1
ming 144 1
hao 333 2
jane 1234 55 2
bob 666 3
herry 555 3
查询 1 个结果:
name phone org_id
lily,ming 133,144 1
hao 333 2
bob,herry 666,555 3
查询 2 结果:
name phone org_id
jane 1234 2
这样,查询2选择了简,查询1选择了豪。所有这些都来自 org_id =2 的同一个组织。但我不需要豪,我只需要简。怎么做? 我的意思是如果query2可以找到结果,那么不需要query1的结果。但是如果query2找不到任何数据,那么我需要query1的数据。
【问题讨论】:
-
联合或联合都无法达到相同的效果,要么使用单个查询过滤数据,要么在联合语句后过滤数据。
-
看起来你需要antijoin,而不是减号