Oracle SQL - Использование объединений для поиска значений в одной таблице, а не в другой - PullRequest
7 голосов
/ 09 февраля 2012

Поскольку, очевидно, все ненавидят подвыборы, я хотел бы сделать это с помощью объединений.

Для невероятно надуманного примера возьмем две таблицы, одну со списком чисел от 1 до 6 и одну со спискомчетных чисел от 0 до 8.Тогда моей целью было бы вывести все нечетные числа в таблице Nums.

Table Nums
Number
One
Two
Three
Four
Five
Six

Table Even
Number
Zero
Two
Four
Six
Eight

Если бы я просто хотел получить список четных чисел в Nums, я бы сделал ...

select nums.number
FROM nums,
     even,
where nums.number = even.number;

Но как я могу использовать эти таблицы дляполучить список нечетных чисел в таблице Nums?Или, другими словами, что-то вроде ...

select nums.number
from nums
where nums.number not in (select number from even);

Ответы [ 2 ]

12 голосов
/ 09 февраля 2012

SubSELECTs хороши при правильном использовании ... «кому-то что-то не нравится» само по себе не является достаточной причиной ИМХО.

Есть несколько вариантов - только 2 в качестве примера:

SELECT nums.number FROM nums 
LEFT OUTER JOIN even ON even.number = nums.number 
WHERE even.number IS NULL

OR

SELECT nums.number FROM nums
MINUS
SELECT even.number FROM even
3 голосов
/ 09 февраля 2012

для Oracle:

select nums.number
  FROM nums,
       even
 where nums.number = even.number(+)
   and even.number is null;

для ANSI SQL:

SELECT nums.number
  FROM nums LEFT OUTER JOIN even ON nums.number = even.number
 WHERE even.number IS NULL;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...