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


Автор: kentaro 14.12.2011, 15:07
Есть две таблицы они связаны полем счёт.Как сделать выборку выбрать счета из одной таблицы и из другой чтоб они не повторялись? Заранее спасибо

Автор: LSD 14.12.2011, 15:09

M
LSD
Необходимо указывать СУБД(и, желательно, версию), чтоб не были даны ответы, которые для Вашей СУБД будут просто неприменимы.

Автор: Zloxa 14.12.2011, 15:12
Цитата(kentaro @  14.12.2011,  15:07 Найти цитируемый пост)
.Как сделать выборку выбрать счета из одной таблицы и из другой чтоб они не повторялись? Заранее спасибо 

Код

select счет from одна_таблица union select счет from другая_таблица

На здоровье smile 

Автор: kentaro 15.12.2011, 07:36
LSD, База данных Oracle 11g

Добавлено через 3 минуты и 39 секунд
Zloxa, 
C Union идёт повтор счетов запрос берёт один счёт с одной таблицы и сдругой в итоге два одинаковых счёта  вот запрос 
Код

SELECT        t.ACCT_NUM, t.BALANCE, t.CURR_CODE, t.INST_ID, t.SUB_TYPE
FROM          ISS_SUBACCT_TAB t
WHERE        t.BALANCE >= 0 
AND t.sub_type = '4V0101'

union 

SELECT  a.acct_num,0,a.curr_code,a.inst_id,null     from iss_acct_tab a

Как можно исключить повторение?

Автор: Akina 15.12.2011, 07:55
 smile  smile 

Автор: AndreyIQ 15.12.2011, 08:39
Выбрать все счета из первой таблицы и объединить с выборкой из второй только тех которых нет в первой:
Код

SELECT        t.ACCT_NUM, t.BALANCE, t.CURR_CODE, t.INST_ID, t.SUB_TYPE
FROM          ISS_SUBACCT_TAB t
WHERE        t.BALANCE >= 0 
AND t.sub_type = '4V0101'

union 

SELECT  a.acct_num,0,a.curr_code,a.inst_id,null     from iss_acct_tab a
where not exists
(
   SELECT        *
   FROM          ISS_SUBACCT_TAB t
   WHERE        t.BALANCE >= 0 
   AND t.sub_type = '4V0101'
   AND t.ACCT_NUM = a.ACCT_NUM
)

Автор: Zloxa 15.12.2011, 08:54
AndreyIQ, в приведенном тобой примере, если ты взялся самостоятельно контролировать не повторяемость счета, наверное лучше было бы использовать union all, чтобы избежать лишней сортировки. 

Но так то вообще все выглядит так, как будто бы тут был бы уместен full outer join, жаль что с ключами ясность не внесена. Однако в оракле, по крайней мере в  ранних версиях, full outer был весьма глючен. На столько, что и по сей день его использовать ссыкотно, потому пусть будет union  smile 

Автор: kentaro 15.12.2011, 15:41
AndreyIQ,  Спасибо то что нужно  smile 

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