Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Oracle > Из какой таблицы взята строка


Автор: NoraS 24.4.2013, 08:57
Имеется три таблицы, которые сравниваются построчно с помощью такой конструкции:
Код

(select* from test 1 minus  select * from test 2)Union
 (select * from test 2 minus select * from test1)
  minus
  (select * from test 3)
 union
(select * from test 3)
minus
(select* from test 1 minus  select * from test 2)Union (select * from test 2 minus select * from test1)

можно ли проставить отметку из какой таблицы взята каждая строка?

Автор: Zloxa 24.4.2013, 09:26
Код

select t.*,'test1' src from (select * from test1 minus select * from test2) t
union -- all
select t.*,'test2' src from (select * from test2 minus select * from test1) t
....


Автор: Akina 24.4.2013, 09:27
Даже не вгладываясь в логику - нет, нельзя. Или, точнее, вопрос не имеет смысла.

Согласно документации, UNOIN исключает дублирование. Однако при этом нет возможности определить, запись какой именно таблицы взята в выходной набор, и запись какой таблицы отброшена как дублирующая. И неважно, что они идентичны...

Автор: Zloxa 24.4.2013, 09:32
Цитата(Akina @  24.4.2013,  10:27 Найти цитируемый пост)
Даже не вгладываясь в логику - нет, нельзя. Или, точнее, вопрос не имеет смысла.


Все как бы так, но с учетом того, что юнятся минуса - т.е. те записи которые не найдены в других наборах, не вглядываясь в логику сложно поставить диагноз  smile 

Автор: Akina 24.4.2013, 10:48
Zloxa, ты вообще разверни весь этот клубок - очень забавная получается штука.


Автор: Zloxa 24.4.2013, 11:18
Цитата(Akina @  24.4.2013,  11:48 Найти цитируемый пост)
вообще разверни весь этот клубок

я начал было, да потом плюнул - не досуг ибо. Потому all и закоментировал постфактум, хотя пост пост фактум, таки понял что зря ))

Автор: NoraS 25.4.2013, 01:39
Akina, 
Zloxa, 
спасибо за разъяснение

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)