Sql 选择减号运算符的两侧
我想找出减号查询两侧每个所有者的表名的差异 假设我从一个表中有2条select语句,我想将它们进行比较: 选择1:Sql 选择减号运算符的两侧,sql,oracle,Sql,Oracle,我想找出减号查询两侧每个所有者的表名的差异 假设我从一个表中有2条select语句,我想将它们进行比较: 选择1: SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER = 'alpha'; 选择2: SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER = 'charlie'; 假设alpha的表有表名:a,b,c,charlie的表有表名b,c 如果我这样做 (SELECT TABLE_NAME FROM A
SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER = 'alpha';
选择2:
SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER = 'charlie';
假设alpha的表有表名:a,b,c,charlie的表有表名b,c
如果我这样做
(SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER = 'alpha') minus
SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER = 'charlie';
这给了我预期的结果:a
相反,如果我做相反的事情:
(SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER = 'charlie') minus
SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER = 'alpha';
这给了我预期的结果:空行
现在,如果我想要表名“a”和执行的空行:
(SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER = 'alpha') minus
SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER = 'charlie'
Union
(SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER = 'charlie') minus
SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER = 'alpha';
那我什么也得不到
如何将“a”行和空行组合返回?
我使用的是Oracle DB如果你明白我的意思,你想要的似乎是
联合减去
?计算并集,计算交集,并在这两个结果集之间执行减号
(使用适当的括号,这是当前努力失败的地方,因为并集
和减号
具有相同的优先级)
我相信,这正确地反映了你的逻辑要求。解决眼前的问题。但我相信你的努力(以及他们的解决方案)掩盖了这里的意图。如果你明白我的意思,你想要的似乎是联合减去
?计算并集,计算交集,并在这两个结果集之间执行减号
(使用适当的括号,这是当前努力失败的地方,因为并集
和减号
具有相同的优先级)
我相信,这正确地反映了你的逻辑要求。解决眼前的问题。但我相信你的努力(以及他们的解决方案)掩盖了这里的意图。只需在联合后使用括号即可
(SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER = 'alpha') minus
SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER = 'charlie'
Union
(
(SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER = 'charlie') minus
SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER = 'alpha'
)
范例
with t1 as
(
select 62054 as sample_id,'2018-09-25 10:18:15' as timestamp,2652 as p_id from dual
union all
select 62054 as sample_id,'2018-09-27 16:44:57' as timestamp,966 as p_id from dual
union all
select 62046 as sample_id,null ,1809 as p_id from dual
union all
select 62046 , '018-09-25 10:18:15' ,2097 from dual
) select * from t1 where p_id=2652
minus
select * from t1 where p_id=966
union
select * from t1 where p_id=2652
minus
select * from t1 where p_id=2652
上述参数将返回null
但是
上面的内容将返回到下面
SAMPLE_ID TIMESTAMP P_ID
62054 2018-09-25 10:18:15 2652
只需在并集后使用括号
(SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER = 'alpha') minus
SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER = 'charlie'
Union
(
(SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER = 'charlie') minus
SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER = 'alpha'
)
范例
with t1 as
(
select 62054 as sample_id,'2018-09-25 10:18:15' as timestamp,2652 as p_id from dual
union all
select 62054 as sample_id,'2018-09-27 16:44:57' as timestamp,966 as p_id from dual
union all
select 62046 as sample_id,null ,1809 as p_id from dual
union all
select 62046 , '018-09-25 10:18:15' ,2097 from dual
) select * from t1 where p_id=2652
minus
select * from t1 where p_id=966
union
select * from t1 where p_id=2652
minus
select * from t1 where p_id=2652
上述参数将返回null
但是
上面的内容将返回到下面
SAMPLE_ID TIMESTAMP P_ID
62054 2018-09-25 10:18:15 2652