Запросить выборку пересечения в oracle? - PullRequest
0 голосов
/ 12 января 2012

У меня есть 2 таблицы - rout и loc.

Столбцы таблицы маршрутизации:

Id (PK)
file_key
rout_no
....

Эта таблица содержит 800 тыс. Записей

Столбцы таблицы столбцов

catalog_no(PK)
country_id    
...

В этой таблице 700 тыс. Записей.Итак, я хочу что-то вроде этого (пересечение двух таблиц)

SELECT rout.file_key,rout.rout_no,loc.country_id  
FROM ROUT_TBL rout, LOC_TBL loc 
WHERE rout.file_key != loc.catalog_no 

Можете ли вы сказать мне, как?

1 Ответ

3 голосов
/ 12 января 2012

Я не уверен, что понимаю, о чем вы спрашиваете. «Пересечение» - это математический термин, который указывает, что вы хотите определить, какие значения существуют в обеих таблицах. Но отправленный вами запрос, похоже, ищет противоположное - набор строк в одной таблице, которых нет в другой.

Если вы действительно имеете в виду пересечение

SELECT rout.file_key,
       rout.rout_no,
       loc.country_id
  FROM rout_tbl rout 
       JOIN loc_tbl loc ON (rout.file_key = loc.catalog_no)

Если вы хотите, чтобы все строки в ROUT не существовали в LOC

SELECT rout.file_key,
       rout.rout_no
  FROM rout_tbl rout
 WHERE NOT EXISTS( SELECT 1
                     FROM loc_tbl loc
                    WHERE loc.catalog_no = rout.file_key )

Если вам нужны данные из ROUT вместе с данными из LOC, если они существуют

SELECT rout.file_key,
       rout.rout_no,
       loc.country_id
  FROM rout_tbl rout 
       LEFT OUTER JOIN loc_tbl loc ON (rout.file_key = loc.catalog_no)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...