Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1276424776
George
2010-06-13 14:26
2010.09.12
Шифрование на Delphi и PHP


15-1276585131
brother
2010-06-15 10:58
2010.09.12
Любителям zx-spectrumа: видео...


15-1276687464
HTCppcpcpc
2010-06-16 15:24
2010.09.12
HTC


2-1276805385
DiamondeX
2010-06-18 00:09
2010.09.12
Открытие диалога из формы наследника


15-1276679561
vajo
2010-06-16 13:12
2010.09.12
диски для raid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский