Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.09.12;
Скачать: CL | DM;

Вниз

Вопрос о запросе..   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.014 c
2-1276607756
ixen
2010-06-15 17:15
2010.09.12
Как закрыть программу в окне авторизации?


15-1276689705
AKE
2010-06-16 16:01
2010.09.12
Есть ли аналог TBitmap в Visual c++?


15-1276782358
12
2010-06-17 17:45
2010.09.12
с формы исчезли все компоненты ADO в дизайн тайме


15-1276600467
Правильный$Вася
2010-06-15 15:14
2010.09.12
странный образ диска


2-1274820470
HRustBB
2010-05-26 00:47
2010.09.12
Как в TreeView определить область видимости