|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
23.11.2007, 17:22 | #1 |
Пользователь
Регистрация: 29.06.2007
Сообщений: 13
|
В чем ошибка в запросе?неверный результат =(
Здравствуйте,коллеги.возникла непонятная проблема.
Задача: есть две таблицы с наименованиями товара и некоторыми дополнительными параметрами,которые не имеют значения: t1(art varchar(30)) и t2(art2 varchar(30)).Кол-во артикулов больше в таблице t2. Однако в t1 есть такие,которых нет в t2. Надо составить запрос на выборку тех строкиз t2,которых НЕТ в t1.C первого взгляда простейший запрос...я тоже так думал.Написал с легкой душой: Код:
Хотя я могу 100%но сказать,что такие записи есть. Как я только не менял условия,уже тупо щелкая,ибо логика пошла к черту. Либо все записи выдавались из t2 либо 0.Я в панике.Где ошибка?Я уже через заднее место делал,выясняя,что ЕСТЬ в t1 из t2.После чего полученный набор подливал к t2 опять же и пытался выбрать записи,где не подливалось ничего(т.е. те строки,которых нет в t1).Тот же результат.Повторю,я 100%но уверен,что такие строки есть.в t1 1000 строк.Из них около 950 из t2.Но не все...учитывая,что в t2 их 3500. и еще одно:эти две таблицы типа ##(глобальные временные) |
23.11.2007, 18:52 | #2 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
Первое. Оператор NOT IN возвращает результат ТОЛЬКО в том случае, если НИ ОДНО (!) из значений art2 не совпало со значениями, полученными во внутреннем запросе.
Второе. Используйте вместо NOT IN другое выражение - NOT EXISTS. |
26.11.2007, 09:29 | #3 |
Пользователь
Регистрация: 29.06.2007
Сообщений: 13
|
не совсем понял,Как применить EXISTS в данном случае.В синтаксис нет упоминания о том,что можно(и главное,как можно) узнать о существовании именно таких строк как в t2.
Кстати,заметил еще один нюанс.В t1 есть еще одно поле,art3,строковое,там практически везде дублируется поле art2. Когда я выполнил: Код:
Таблица t1 была заполнена через INSERT INTO , где в подзапросе основным полем было art3,остальные подгружались с помощью LEFT JOIN из других таблиц. И еще одно.В менеджере на специально созданных табличках (пробовал и с временными и с постоянными) запрос опять же выполняется замечательно. Мистика какая-то с этим полем t1.art2... ах да,в поле t1.art2 есть пустые значения NULL, а в поле t1.art3 нет. Последний раз редактировалось Lunatikus; 26.11.2007 в 09:42. |
26.11.2007, 09:50 | #4 |
Пользователь
Регистрация: 29.06.2007
Сообщений: 13
|
все...нашел ошибку...аллилуйя...два дня бился из-за такой дурацкой ошибки...дело-то и было в нулевых значениях t1.art2...их было несколько.Видимо,я так и не понял до конца принцип выполнения условия NOT IN.Убрав нулевые значения в подзапросе:
Код:
Т.е. если просто: таблица1: поле1 А Б В Г таблица2: поле1 А Б Д Такой запрос выведет только строку Д,ибо ее нет в таблица1.Но я так и не понял,почему наличие пустого значения в таблица1 ведет к невыполнению условия. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ошибка SQL запросе. | EVG44 | БД в Delphi | 2 | 21.10.2007 22:42 |
Ошибка при запросе SQL в IB | Алекс1 | БД в Delphi | 2 | 24.06.2007 22:37 |
Ошибка в SQL запросе | eremin | БД в Delphi | 2 | 23.06.2007 07:13 |
Ошибка в SQL запросе...!? | KeyDok | БД в Delphi | 5 | 21.06.2007 09:19 |