假设我在同一个表上有两个SELECT
查询,我需要逐列比较它们。
查询1:
select * from mytable t1 where t1.code = '100'
返回:
id name
1 A
2 B
查询2:
select * from mytable t2 where t2.code = '999'
返回:
id name
1 A
2 C
对于我的情况,两个查询都返回相同的行数。
期望的结果
id name_t1 name_t2
2 B C
如何使用 PL / SQL开发人员(更好地使用工具来避免查询)找到它们之间的数据差异?
我的PL / SQL开发人员 版本 8.0.3.1510
答案 0 :(得分:4)
您可以使用MINUS
select * from mytable t1 where t1.code = '100'
MINUS
select * from mytable t2 where t2.code = '999';
MINUS通过从结果中删除仅在第二个查询中找到的所有行,为您提供在第一个查询中找到但不在第二个查询中找到的行
答案 1 :(得分:2)
有很多方法可以检查两个查询之间的区别;如果您需要在数据集之间存在差异,可以尝试File file = new File(".\\File");
//This take the file which are in the same folder that exe.
:
MINUS
通过合并两个SQL> select * from mytable t1 where t1.code = '100'
2 minus
3 select * from mytable t2 where t2.code = '999';
ID CODE NAME
---- ---- ----------
1 100 A
2 100 B
SQL> select * from mytable t2 where t2.code = '999'
2 minus
3 select * from mytable t1 where t1.code = '100';
ID CODE NAME
---- ---- ----------
1 999 A
2 999 C
,您可以MINUS
:
T1-T2 AND T2-T1
如果您需要检查字段差异,请根据'键'字段,您需要SQL> select 'T1 MINUS T2' TYPE, t1_t2.* from
2 (
3 select * from mytable t1 where t1.code = '100'
4 minus
5 select * from mytable t2 where t2.code = '999'
6 ) t1_t2
7 union all
8 select 'T2 MINUS T1' TYPE, t2_t1.* from
9 (
10 select * from mytable t2 where t2.code = '999'
11 minus
12 select * from mytable t1 where t1.code = '100'
13 ) t2_t1;
TYPE ID CODE NAME
----------- ---- ---- ----------
T1 MINUS T2 1 100 A
T1 MINUS T2 2 100 B
T2 MINUS T1 1 999 A
T2 MINUS T1 2 999 C
:
JOIN
答案 2 :(得分:0)
选择id,t1.name为name_t1,t2.name为name_t2 来自myTable t1 右键加入myTable t2 右连接t1.name = t2.name 其中t1.name为null