Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > СУБД, общие вопросы > помогите составить запрос!


Автор: Академик 21.7.2006, 15:34
Пожалуста, помогите составить запрос!
Есть 2 таблицы А и Б.

Таблица А:
ID - первичный ключ
Value - данные

Таблица Б
ID - первичный ключ
FK_A - внешний ключ на поле ID таблицы А
Value - данные

Мне нужно получить все A.Value и Б.ID при заданном Б.Value 

Автор: LSD 21.7.2006, 15:37
Код
select A.VALUE, B.ID
  from A
  left join B on B.FK_A = A.ID
  where B.VALUE = ...
 

Автор: Академик 21.7.2006, 15:49
Спасибо, друг! Работает!  smile 

Я бы был просто счастлив, если бы ты объяснил как это работает? 

Автор: LSD 21.7.2006, 16:00
Почитай http://www.linuxshare.ru/postgresql/tutorial/tutorial-join.html и http://www.activeserverpages.ru/DataBase/sql/join.asp. Ну и еще какую нибудь книгу по теории баз данных. 

Автор: Академик 21.7.2006, 17:16
О спасибо!   smile  

Автор: Olimpic21 8.8.2006, 11:02
SELECT A.Value, Б.ID
FROM А, Б
WHERE on B.FK_A = A.ID AND B.VALUE = ...
  
а такое не канает чо ли?) или через джоин оптимальнее запрос?
в оракле вроде джойна нету?

Автор: LSD 8.8.2006, 11:49
Цитата(Olimpic21 @  8.8.2006,  12:02 Найти цитируемый пост)
а такое не канает чо ли?) или через джоин оптимальнее запрос?

WHERE on - "не канает" точно. И через join запрос будет оптимальней в общем случае, т.к. мы не полагаемся на оптимизатор, а сами решаем что и как join-ить.


Цитата(Olimpic21 @  8.8.2006,  12:02 Найти цитируемый пост)
в оракле вроде джойна нету?

В Oracle есть все smile
Начиная с версии 8.1.7 поддерживаются оба синтаксиса, традиционный - join и собственный - (+).

Автор: Olimpic21 8.8.2006, 13:19
ну "Where on" конечно же опRчатка) чето никакда с этим джоином не работал надо бы попробывать)

Автор: Olimpic21 8.8.2006, 14:04
а запрос где обьединятся более двух таблиц с помощью джоин можно написать?
например следующий
Код
SELECT *
     FROM (SELECT * FROM s_Pd_Crts WHERE Crt_Branch = :1 UNION 
                            SELECT * FROM s_Pd_Crts WHERE :1='%'),        
                  s_Pd_Crt_Acts, s_Lists_Data, s_Lists
         WHERE Acn_Crt_Code=Crt_Code
               AND Ll_Code=Ld_Code
               AND Ll_Mnemo = 'CRT_CRD_ACCNT_LIST'
               AND Ld_Prty>0
               AND (Crt_Status = 'A' or Crt_Dt_Till > TRUNC(TO_DATE('01.01.2005')))                                              
               AND Crt_Pdt_Mnemo = 'xxxxxxxx'
               AND Acn_Mnemo = 'xxxx'
               AND Acn_Dt>=TRUNC(TO_DATE('01.01.2005'))                   
               AND Acn_Dt<TRUNC(TO_DATE('01.01.2005'))+30
               AND SUBSTR(Crt_Accnt,1,5) = Ld_Bacc

может скажите где можно поподробнее про эту конструкцию прочитать?

Автор: LSD 8.8.2006, 14:32
Цитата(Olimpic21 @  8.8.2006,  15:04 Найти цитируемый пост)
а запрос где обьединятся более двух таблиц с помощью джоин можно написать?

Можно. Синтаксис смотри http://download-east.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_10002.htm#i2080416 и http://download-east.oracle.com/docs/cd/B19306_01/server.102/b14200/queries006.htm. И почитай какие нибудь книжки по языку SQL.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)