Форум 3DNews
Вернуться   Форум 3DNews > Программирование > Программирование

Ответ Создать новую тему
Опции темы Опции просмотра
Непрочитано 15.09.2007, 00:32   [включить плавающее окно]   #1
Garris
Начинающий
Автор темы
 
Регистрация: 04.10.2004
Как написать запрос (вопроc по SQL)?

Несколько таблиц связаны между собой (например Table1 c Table2, Table2 c Table3, Table3 c Table4 и.т.д.). Но не для всех записей Table3 есть соответствующие записи в Table4. Нужно написать запрос так, чтобы вывести записи из таблицы Table3, где поле связанной таблицы Table4.Field имеет значение NULL, и записи из таблицы Table3, для которых нет соответствия в Table4 (т.е. для которых тоже отсутствует соответствующее Table4.Field).
Т.е., если написать "в лоб", то будет так (пример упрощён):

SELECT Table3.* from Table1,Table2,Table3,Table4
Where Table1.Field1=Table2.Field1 AND Table2.Field2=Table3.Field2
AND ( (Table3.Field3=Table4.Field3 AND Table4.Field is NULL) OR Table3.Field3 NOT IN (SELECT Table4.Field3 from Table4, Table3 where Table3.Field3=Table4.Field3) )

Такой запрос не годится, так как выполняется очень медленно.
Задача: нужно написать этот запрос так, чтобы он выполнялся не слишком долго, но без UNION и желательно без хранимой процедуры. Это возможно?
Garris вне форума  
Ответить с цитированием
Непрочитано 16.09.2007, 14:12   [включить плавающее окно]   #2
Гхост-цзы
Мужской Умудрённый
 
Аватар для Гхост-цзы
 
Регистрация: 04.06.2004
Цитата (Garris) »
Нужно написать запрос так, чтобы вывести записи из таблицы Table3, где поле связанной таблицы Table4.Field имеет значение NULL, и записи из таблицы Table3, для которых нет соответствия в Table4 (т.е. для которых тоже отсутствует соответствующее Table4.Field).
ограничиваясь Table3 и Table4 (без прочей мути), этот запрос будет выглядеть так:
select Table3.* from Table3 left join Table4 on Table3.Field=Table4.Field where Table4.Field is null

(ещё вариант:
select * from Table3 left join Table4 using(Field) where Table4.Field is null)
__________________
Крылья знаний меня от людей отлучили,
Я увидел, что люди - подобие пыли.

Последний раз редактировалось Гхост-цзы; 16.09.2007 в 14:15.
Гхост-цзы вне форума  
Ответить с цитированием
Ответ Создать новую тему

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 15:51. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 2000-2017 3DNews. All Rights Reserved.
Администрация 3DNews требует соблюдения на форуме правил и законов РФ
Серверы размещены в Hostkey