Автор Тема: Запрос для поиска отсутствующих в др. таблице значений  (Прочитано 3390 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн puh

  • Ни свой, ни чужой
  • Старожил
  • ****
  • Сообщений: 300
  • +0/-0
  • 2
    • Просмотр профиля
Вот понял, что попал :(. С SQL знаком 1,5 дня.
Есть 2 таблицы - одна большая, вторая маленькая, содержащая некоторые данные первой. Нужно получить из первой все ОТСУТСТВУЮЩИЕ во второй таблице значения.
Что-то вроде "отнять одну таблицу от другой"
Поможете?
« Последнее редактирование: 28 Февраля 2002, 16:51:21 от puh »
© Винни-Пух

Оффлайн fidget

  • Непоседа
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 607
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Ну что-то вроде этого: 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

  • Ни свой, ни чужой
  • Старожил
  • ****
  • Сообщений: 300
  • +0/-0
  • 2
    • Просмотр профиля
Беда в том. что
« Ответ #2 : 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];

надо как-то дополнить...
« Последнее редактирование: 28 Февраля 2002, 17:55:52 от puh »
© Винни-Пух

Оффлайн fidget

  • Непоседа
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 607
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Цитировать
Есть ли возможность сравнить несколько полей (name и surname например)


ты то можешь вместо using(id) использовать on parent.name=child.name или что-то в этом роде,
но т.к. значения этих полей могут быть не уникальными, то гарантии, что ты получишь все записи, котторые тебе нужны нет :(
На Машине Тьюринга далеко не уедешь.

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Цитировать
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;
Так?
2B OR NOT 2B = FF

Оффлайн puh

  • Ни свой, ни чужой
  • Старожил
  • ****
  • Сообщений: 300
  • +0/-0
  • 2
    • Просмотр профиля
Все сделал, спасибо.
« Ответ #5 : 28 Февраля 2002, 18:08:40 »
Этим же способом, просто отсортировал и удалил ненужные данные.
Большое спасибо, fidget! Большое спасибо, Chs!
К тому же это мой 100 постинг! УРА!:appl:
© Винни-Пух

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28