Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите, пожалуйста. Очень прошу.  [new]
Настасья_91
Member

Откуда:
Сообщений: 14
у меня есть 2 таблицы с 3 меня столбиками:
Мне нужно вывести все значения, которых нет во второй. В чем подвох? Мне нужно выбирать по 2м стоблцам построчно. Т.е.
Допустим:

первая таблица

1 Анна Ивановна
2 Елена Федоровна
3 Ирина Георгиевна
4 Ольга Сергеевна
5 Павел Михайлович
6 Сергей Олегович
7 Александр Вадимович
8 Олеся Михайловна
9 Юлия Ивановна
10 Денис Геннадьевич

вторая таблица

1 Анна Ивановна
2 Ирина Георгиевна
3 Александр Вадимович
4 Денис Геннадьевич

И мне должно выйти

2 Елена Федоровна
4 Ольга Сергеевна
5 Павел Михайлович
6 Сергей Олегович
8 Олеся Михайловна
9 Юлия Ивановна

Если писать через != и подзапрос, то там должно быть только одно значение, а у меня целая таблица, если через in то получится комбинации этих значений...
24 ноя 11, 15:32    [11652360]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста. Очень прошу.  [new]
fabulaspb
Member

Откуда: Санкт-Петербург
Сообщений: 34
Настасья_91,

SELECT id, name FROM tbl
WHERE name NOT IN(SELECT name FROM tbl2)
24 ноя 11, 15:36    [11652410]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста. Очень прошу.  [new]
Настасья_91
Member

Откуда:
Сообщений: 14
мне нужно чтобы он одновременно исключал имя и отчество
24 ноя 11, 15:52    [11652617]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста. Очень прошу.  [new]
Настасья_91
Member

Откуда:
Сообщений: 14
отчество это другой столбец
24 ноя 11, 15:53    [11652618]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста. Очень прошу.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
not exists
24 ноя 11, 15:53    [11652626]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста. Очень прошу.  [new]
last_student
Guest
Настасья_91
мне нужно чтобы он одновременно исключал имя и отчество


если имя и отчество в разных полях, то тогда можно так

SELECT id, name, otchestvo FROM tbl
WHERE name+otchestvo NOT IN(SELECT name+otchestvo FROM tbl2)
24 ноя 11, 15:56    [11652654]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста. Очень прошу.  [new]
fabulaspb
Member

Откуда: Санкт-Петербург
Сообщений: 34
Вариант через подзапрос и NOT EXISTS:

SELECT * FROM tbl
WHERE NOT EXISTS(SELECT * FROM tbl2 WHERE first_name = tbl.first_name AND last_name = tbl.last_name)
24 ноя 11, 16:00    [11652700]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста. Очень прошу.  [new]
Настасья_91
Member

Откуда:
Сообщений: 14
Спасибо огромное)
24 ноя 11, 16:12    [11652854]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста. Очень прошу.  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
last_student
Настасья_91
мне нужно чтобы он одновременно исключал имя и отчество


если имя и отчество в разных полях, то тогда можно так

SELECT id, name, otchestvo FROM tbl
WHERE name+otchestvo NOT IN(SELECT name+otchestvo FROM tbl2)
Вот только так не надо!
Никогда.

Мало того, оно и логически неправильно,
ибо сконкатенированная строка может получиться одинаковой
при неравных слагаемых.
24 ноя 11, 16:37    [11653119]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста. Очень прошу.  [new]
last_student
Guest
iap,

ну вариант fabulaspb подойдет точно тогда
24 ноя 11, 17:07    [11653376]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста. Очень прошу.  [new]
SuperJur
Member

Откуда: Москва
Сообщений: 274
Не понял. А почему вариант
... From t1 left join t2 where t2.name is null
Не катит ?
25 ноя 11, 06:57    [11656019]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста. Очень прошу.  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
SuperJur
Не понял. А почему вариант
... From t1 left join t2 where t2.name is null
Не катит ?
А что сказал что не катит?!

А вот ветка обсуждения про EXISTS и LEFT JOIN: 10704622
25 ноя 11, 18:22    [11661517]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста. Очень прошу.  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
Настасья_91,

для ms sql 2008
select name, name2
from tab1
explicit
select name, name2
from tab2
25 ноя 11, 21:12    [11662140]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста. Очень прошу.  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
trew,

Ошибочка, except подразумевалось.
select name, name2
from tab1
except
select name, name2
from tab2
25 ноя 11, 21:17    [11662162]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить