Вопрос SQL - найти номер из списка - PullRequest
6 голосов
/ 20 июня 2011

У меня есть таблица с 100 числами в ней. Теперь у меня есть список из 11 чисел, одно из которых отсутствует в таблице (отличается от 100 чисел из него).

Когда я запрашиваю список из 11 чисел select * from table where number in (' ',' ',' '......), он возвращает 10 чисел в таблице.

Теперь мой вопрос: как мне найти номер из моего списка, которого нет в таблице? (только с SQL, потому что сейчас я использую Excel для этого).

Спасибо!

Ответы [ 5 ]

7 голосов
/ 20 июня 2011

Вам необходимо использовать предложение values:

with yourlist as (
select 1 as i from dual
union all
select 2 as i from dual
...
union all
select 3 as i from dual
)
select yourlist.i
from yourlist
left join yourtable
on yourtable.num = yourlist.i
where yourtable.num is null
2 голосов
/ 20 июня 2011

Один из способов - поместить список чисел во вторую таблицу, а затем использовать левое объединение, чтобы найти, где оно не соответствует

SELECT number FROM list
LEFT JOIN table USING(number)
WHERE table.number IS NULL;
1 голос
/ 20 июня 2011

Это функционально эквивалентно ответу @Denis, но использует несколько иные методы:

CREATE TYPE nt_number AS TABLE OF NUMBER;

SELECT   COLUMN_VALUE
  FROM   table(nt_number(1,3,8,12,14))
MINUS
SELECT   NUMBER_COLUMN
  FROM   YOUR_TABLE;

Изменение MINUS на INTERSECT даст вам значения, существующие в обеих таблицах.

1 голос
/ 20 июня 2011

В базе данных оракула вы можете использовать NOT IN также ..

означает, что вы использовали и знаете о ключевом слове IN точно так же, для желаемого результата вы можете использовать NOT IN ...

Вы также можете использовать следующий запрос для этого -

вариант 1: эти 10 цифр в таблице - (скажем, имя таблицы - list1)

select list1.num from list1
where list1.num not in (select distinct table.number from table)

вариант 2: поскольку вы разместили свой вопрос в том виде, как у вас нет чисел в таблице -

select list1.num from 
(
select number1 num from dual
union
select number2 num from dual
union
select number3 num from dual
union
select number4 num from dual
union
select number5 num from dual
union
select number6 num from dual
union
select number7 num from dual
union
select number8 num from dual
union
select number9 num from dual
union
select number10 num from dual
union
select number11 num from dual
) list1
where list1.num not in (select distinct table.number from table)

вместо номера от 1 до 11 вы должны вставить свой номер списка ..

0 голосов
/ 20 июня 2011

Сначала я пропустил твой квест:)

Лучшей ставкой являются числа во временной таблице и объединение против нее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...