Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [MySQL]поиск несвязанных записей в двух таблицах 
:(
    Опции темы
Finder128
Дата 2.3.2009, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 15.3.2008

Репутация: нет
Всего: нет



Ситуация такая. У меня есть две таблицы в базе у которых в одном из полей значения должны совпадать. Таблицы имеют разное количество записей (6230 и 6242), хотя в идеале это количество должно быть одинаковым. Так вот, хотелось бы знать, какой запрос нужно написать, чтобы узнать, каких именно записей из большей таблицы нет в меньшей таблице.
Если я не ошибаюсь, это будет пересечение таблиц. Я сделал такой запрос:
Код

SELECT models.* FROM models,data WHERE data.link!=models.link_model

Но выдаётся какой-то бредовый результат из дикого количества записей. В чём дело?
 smile 


Это сообщение отредактировал(а) Finder128 - 2.3.2009, 10:32
PM MAIL   Вверх
ТоляМБА
Дата 2.3.2009, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: 4
Всего: 252



Код

SELECT Table1.Field1
FROM Table1
where Table1.Field1 not  in
(Select Table2.Field1 from Table2 where  Table2.Field1 is not null);


или
Код

SELECT Table1.Field1
FROM Table1 LEFT JOIN Table2 ON Table1.Field1 = Table2.Field1
WHERE (((Table2.Field1) Is Null));


В вопросе php нет ни на копейку, что он делает в этой ветке?

PM   Вверх
skyboy
Дата 2.3.2009, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 15
Всего: 260



запрос с соединением нескольких таблиц происходит так(наличие индексов и работа оптимизатора может немного изменить алгоритм, я про общий случай): сначала реализовывается декартово произведение таблиц. Т.е. каждая запись из первой таблицы совмещается с каждой записью из второй. Получается <количество записей в первой таблице> ∙ <количество записей во второй таблице> записей. Потом к полученной куче применяются заданные в запросе фильтры и "неподходящие" записи выбрасываются.
В твоем случае, ты сначала получаешь декартово произведение таблиц из которого выбрасываются только те записи, в которых data.link = models.link_model(кстати говоря, не знал про оператор "!="; сколько помню себя, использовал "<>" для "не равно"). Что, очевидно, не то, что тебе надо.
Тебе же нужен либо запрос:
Код

SELECT models.* 
FROM models
LEFT JOIN data 
ON data.link =models.link_model
WHERE data.link is NULL

или 
Код

SELECT data.* 
FROM data
LEFT JOIN models
ON data.link =models.link_model
WHERE models.link_model is NULL

И ещё: создание запросов не имеет никакого отношения к PHP. В следующий раз внимательнее выбирай раздел
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0693 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.