Forum Webscript.Ru

Общие => Базы данных => Тема начата: puh от 28 Февраля 2002, 16:02:57

Название: Запрос для поиска отсутствующих в др. таблице значений
Отправлено: puh от 28 Февраля 2002, 16:02:57
Вот понял, что попал :(. С SQL знаком 1,5 дня.
Есть 2 таблицы - одна большая, вторая маленькая, содержащая некоторые данные первой. Нужно получить из первой все ОТСУТСТВУЮЩИЕ во второй таблице значения.
Что-то вроде "отнять одну таблицу от другой"
Поможете?
Название: Запрос для поиска отсутствующих в др. таблице значений
Отправлено: fidget от 28 Февраля 2002, 17:21:56
Ну что-то вроде этого: 2 таблицы parent и child
parent:            
+----+-------+
| id | name  |
+----+-------+
|  1 | vita     |
|  2 | egor   |
|  3 | sasha |
|  4 | vitya   |
|  5 | sasha |
|  6 | tolya   |
+----+-------+
child:
+----+-------+
| id | name  |
+----+-------+
|  3 | sasha |
|  4 | vitya |
+----+-------+

выбираем данные:
select parent.id, parent.name from parent left join child using(id) where child.id is null;

получаем результат:
+----+-------+
| id | name  |
+----+-------+
|  1 | vita    |
|  2 | egor  |
|  5 | sasha|
|  6 | tolya  |
+----+-------+

так покатит?
Название: Беда в том. что
Отправлено: puh от 28 Февраля 2002, 17:36:09
в меньшей таблице нет ID, т.е. данные не проиндексированы. Есть ли возможность сравнить несколько полей (name и surname например)

Такой синтаксис:

SELECT *
FROM [Viss tavai majai] LEFT JOIN [Moj Dom] ON [Viss tavai majai].[Firma] =[Moj Dom].[Firma];

надо как-то дополнить...
Название: Запрос для поиска отсутствующих в др. таблице значений
Отправлено: fidget от 28 Февраля 2002, 18:05:50
Цитировать
Есть ли возможность сравнить несколько полей (name и surname например)


ты то можешь вместо using(id) использовать on parent.name=child.name или что-то в этом роде,
но т.к. значения этих полей могут быть не уникальными, то гарантии, что ты получишь все записи, котторые тебе нужны нет :(
Название: Запрос для поиска отсутствующих в др. таблице значений
Отправлено: Chs от 28 Февраля 2002, 18:08:04
Цитировать
SELECT *
FROM [Viss tavai majai] LEFT JOIN [Moj Dom] ON [Viss tavai majai].[Firma] =[Moj Dom].[Firma];

SELECT *
FROM table1 as a LEFT JOIN table2 as b  ON a.Firma=b.Firma and a.Name=b.Name where b.id is null;
Так?
Название: Все сделал, спасибо.
Отправлено: puh от 28 Февраля 2002, 18:08:40
Этим же способом, просто отсортировал и удалил ненужные данные.
Большое спасибо, fidget! Большое спасибо, Chs!
К тому же это мой 100 постинг! УРА!:appl: