![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос о запросе.. [D6]
DROWSY © (2010-06-11 05:34:00)Firebird 1.5
В таблице Main есть два внешних ключа (D1, D2) к таблице Dep.
Мне нужен запрос, возвращающий записи, содержащие все поля Main, все поля Dep записи по коду D1
и все поля Dep записи по коду D2.
Написал такой запрос:
select distinct поля Main,поля Dep, поля Dep1
from Main
inner join Main Main1 on (Main.code = Main1.code)
inner join Dep on (Main.D1 = Dep.code)
inner join Dep Dep1 on (Main1.D2 = Dep1.code)
Можно ли и как сделать по-другому, правильнее?
sniknik (2010-06-12 11:03:00) [1]> Мой запрос медленно исполняется
ну а чего ты хотел? делаешь декартово произведение таблицы самой на себя, добавляешь к ней данные другой таблицы а после дистинктом убираешь лишние, которые сам же и создал...
> inner join Main Main1on ( Main.code = Main1.code)
объясни вот, что это за фигня?
DROWSY (2010-06-12 05:05:00) [2]
> 12 © (11.06.10 08:37) [3]
> И. Павел © (11.06.10 08:44) [4]
Нет, мне нужен запрос, который даёт те же результаты, что и
такой:
select distinct поля Main,поля Dep, поля Dep1
from Main
inner join Main Main1 on (Main.code = Main1.code)
inner join Dep on (Main.D1 = Dep.code)
inner join Dep Dep1 on (Main1.D2 = Dep1.code)
То есть, результат - записи такого типа:
Main.D1, Main.D2,.. все поля Main1...,
все поля записи таблицы Dep, где Main.D1 = Dep.Code,
все поля записи таблицы Dep, где Main.D2 = Dep.Code
Мой запрос медленно исполняется и выглядит коряво, а потому, видимо, далеко не оптимальный.
И. Павел (2010-06-11 08:44:00) [3]> [0] DROWSY
Наверное, можно сократить запрос до такого вида:
select distinct поля Main,поля Dep, поля Dep1
from Main
inner join Dep on (Main.D1 = Dep.code) or (Main.D2 = Dep.code)
12 (2010-06-11 08:37:00) [4]т.е.
select поля Main,поля Dep
from Main
inner join Dep on (Main.D1 = Dep.code)
union
select поля Main,поля Dep
from Main
inner join Dep on (Main.D2 = Dep.code)
12 (2010-06-11 08:31:00) [5]FB не юзал, но может юнион двух простых джойнов?
а это зачем и что это вообще, какой смысл?
> inner join Main Main1 on (Main.code = Main1.code)
И. Павел (2010-06-11 08:08:00) [6]Если я правино понял, что нужно сделать, то третья строчка не нужна.