2016-03-29 2 views
2

Предположим, у меня есть два запроса SELECT в одной таблице, и мне нужно сравнить их по столбцам.Сравните два оператора SELECT с помощью PL/SQL Developer

Запрос 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 Developer (лучше с помощью инструментов, чтобы избежать запроса)?

Мой PL/SQL Developer Версия 8.0.3.1510

+0

Я думаю, единственный способ может быть [экспорта, чтобы преуспеть вариант] (HTTP: // StackOverflow. ком/вопросы/4168398/как к экспорту-запрос-результат к CSV-в-оракул-SQL-разработчик). ['MINUS'] (http://www.techonthenet.com/sql/minus.php) также может понравиться вам. –

ответ

3

вы можете использовать MINUS

select * from mytable t1 where t1.code = '100' 

MINUS 
select * from mytable t2 where t2.code = '999'; 

МИНУС дает вам строки, которые находятся в первом запросе, а не во втором запросе по удаление из результатов всех строк, найденных только во втором запросе

+0

В моем случае оба запроса возвращают одинаковое количество строк. и нужно сравнить их cascade –

+0

Привет, вы хотите сравнить количество строк? от разницы в данных – Ramki

+0

сравнить столбец по данным столбца –

1

Существует много способов проверить разницу между двумя запросами; если вам нужны различия betwee набора данных, вы можете попробовать 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:

SQL> select id, t1.name as name_t1, t2.name as name_t2 
    2 from myTable t1 
    3 inner join myTable t2 using(id) 
    4 where t1.name != t2.name 
    5 and t1.code = '100' 
    6 and t2.code = '999'; 

    ID NAME_T1 NAME_T2 
---- ---------- ---------- 
    2 B   C 
0

выберите идентификатор, t1.name как name_t1, t2.name как name_t2 от MYTABLE t1 по правому краю MYTABLE t2 по правому краю t1.name = t2.name где t1.name равна нулю

 Смежные вопросы

  • Нет связанных вопросов^_^