Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.04.10;
Скачать: [xml.tar.bz2];

Вниз

SELECT из большого числа таблиц   Найти похожие ветки 

 
galexis   (2003-03-20 12:33) [0]

Уважаемые мастера! Подскажите как правильно составить SQL запрос на отбор записи из большого числа таблиц связанных по разным полям. Делаю так:
SELECT A.fld1,B.fld2,C.fld3,D.fld4,E.fld5 from Tbl1 A, Tbl2 B, Tbl3 C, Tbl4 D, Tbl5 E where A.fld6=123 AND B.fld7=A.fld6
AND C.fld8=A.fld6 AND D.fld9=C.fld10 AND E.fld11=C.fld12


Но тогда если нет записи предпоожим в последней таблице удовлетворяющей условию, то и весь запрос возвращается пустым. Как правильно связывать таблицы?


 
zacho   (2003-03-20 12:37) [1]

В завистимости от того, что тебе нужно получить, есть INNER JOIN и LEFT(RIGHT) OUTER JOIN. Подробнее смотри Language Refrence.


 
galexis   (2003-03-20 12:43) [2]

А где взять этот Language Refrence? Пользуюсь книжками по ораклу. Не могу понять как использовать LEFT JOIN более чем для двух таблиц.


 
zacho   (2003-03-20 12:47) [3]


> galexis © (20.03.03 12:43)

http://www.ibase.ru/ib6.htm#doc
Или ищи какие-нибудь книги по основам SQL. Синтаксис JOIN вроде везде объяснялся, а в Оракле может он и правда специфичный, не знаю


 
Alexandr   (2003-03-20 12:48) [4]

стандарт SQL-92


 
galexis   (2003-03-20 12:59) [5]

Почитал я Language Refrence. Почитал, но так и не понял, как связать более 2 таблиц. Для двух все понятно. Ну а для трех как? Писать LEFT JOIN ... ON для каждой связи и разделять запятыми что ли?


 
zacho   (2003-03-20 13:06) [6]

Не надо запятых.
SELECT ... FROM ...
LEFT JOIN ... ON ...
LEFT JOIN .. ON ..
LEFT JOIN .. ON ..
...


 
galexis   (2003-03-20 13:27) [7]

Это понял, спасибо. Но надо еще связать
select
from Tbl1 A
LEFT JOIN Tbl2 B ON B.fld1=A.fld1
LEFT JOIN Tbl3 C ON C.fld1=A.fld1
LEFT JOIN Tbl4 D ON D.fld2=C.fld2

Как здесь D с C связать?


 
zacho   (2003-03-20 13:30) [8]


> galexis © (20.03.03 13:27)

Именно так, как ты и написал :-)


 
galexis   (2003-03-20 13:37) [9]

Действительно работает! Огромное спасибо. Вопрос закрыт


 
Johnmen   (2003-03-20 13:40) [10]

>galexis © (20.03.03 12:43)
>Пользуюсь книжками по ораклу.

В Оракле нет предикатов (LEFT, RIGHT) JOIN, там другой синтаксис.
WHERE A.id(+)=B.id


 
Johnny Smith   (2003-03-20 14:16) [11]

2Johnmen © (20.03.03 13:40)
В Оракле нет предикатов (LEFT, RIGHT) JOIN, там другой синтаксис.
WHERE A.id(+)=B.id

Уже есть. В "девятке" появились... Как и CASE"ы.



 
eugie   (2003-03-21 07:36) [12]

На практике включения (JOINы) могут сильно замедлить выполнение запроса (особенно в работе с IB, FIB), поэтому рекомендую попробовать следующий способ:
select t1.*,
(select t2.fieldX from table2 t2 where t2.ConnectionField1=t1.ConnectionField1) Psevdonim1,
(select t3.fieldX from table3 t3 where t3.ConnectionField2=t1.ConnectionField2) Psevdonim2
from table1 t1
order by t1.field1, t1.field2,...

Наибольшая скорость выполнеия такого запроса в случае, если просмотр таблиц происходит по индексированным полям.
В случае с JOINами в таблице table1 будут просмотрены все записи от начала до конца, в пордке их физческого положения, несмотря на предложение Order By.


 
Johnmen   (2003-03-21 09:34) [13]

>eugie © (21.03.03 07:36)

Могу ответственно заявить, что явные соединения (JOIN) работуют быстрее неявных в виде вложенных запросов...
И во-вторых, на так называемый тобою "порядок просмотра" влияет наличие индексов, а не всякие Order By...


 
zacho   (2003-03-21 10:17) [14]


> Johnmen © (21.03.03 09:34)

Могу еще добавить, что неявный join в виде SELECT .. FROM TABLE1, TABLE2, .. WHERE .. действительно может ускорить выполнение запроса, но это зависит от версии IB и индексов.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.04.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.007 c
1-30323
АндрейБ
2003-03-28 14:45
2003.04.10
Отчет в Excel e


8-30462
Новичек
2003-01-04 13:57
2003.04.10
Можно ли проиграть Wave-файл без применения MediaPlayer?


6-30504
stur
2003-02-17 16:32
2003.04.10
ClientSocket , режим NonBlocking. Где обработать исключение?


3-30307
Step[B.M.]
2003-03-23 01:57
2003.04.10
DBF. Данные в DOS кодировке. Корректно не отображаются в гриде.


1-30349
Yr2
2003-03-29 19:17
2003.04.10
Как





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский