Форум: "Начинающим";
Текущий архив: 2010.09.12;
Скачать: [xml.tar.bz2];
ВнизВопрос о запросе.. Найти похожие ветки
← →
DROWSY (2010-06-11 05:34) [0]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)
Можно ли и как сделать по-другому, правильнее?
← →
И. Павел © (2010-06-11 08:08) [1]Если я правино понял, что нужно сделать, то третья строчка не нужна.
← →
12 © (2010-06-11 08:31) [2]FB не юзал, но может юнион двух простых джойнов?
а это зачем и что это вообще, какой смысл?
> inner join Main Main1 on (Main.code = Main1.code)
← →
12 © (2010-06-11 08:37) [3]т.е.
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)
← →
И. Павел © (2010-06-11 08:44) [4]> [0] DROWSY
Наверное, можно сократить запрос до такого вида:
select distinct поля Main,поля Dep, поля Dep1
from Main
inner join Dep on (Main.D1 = Dep.code) or (Main.D2 = Dep.code)
← →
DROWSY (2010-06-12 05:05) [5]
> 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
Мой запрос медленно исполняется и выглядит коряво, а потому, видимо, далеко не оптимальный.
← →
sniknik © (2010-06-12 11:03) [6]> Мой запрос медленно исполняется
ну а чего ты хотел? делаешь декартово произведение таблицы самой на себя, добавляешь к ней данные другой таблицы а после дистинктом убираешь лишние, которые сам же и создал...
> inner join Main Main1 on (Main.code = Main1.code)
объясни вот, что это за фигня?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.09.12;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c