2013-12-05 3 views
0

Я новичок в SQL. любезно помогите мне в создании SQL-запроса для сценария ниже.формирование SQL-заявления с использованием соединения

У меня есть 2 таблицы и хотелось бы присоединиться к обеим таблицам. Ниже вы можете найти утверждение, которое я использовал для присоединения.

create table F5 (BT_TYPE int, appln int) 
insert into F5 values(2,1) 

create table LTB (Field int, lang int, Desc0 varchar(255)) 
insert into LTB values (1,1,'German') 
insert into LTB values (1,2,'English') 
insert into LTB values (1,3,'Itailian') 
insert into LTB values (1,4,'Free lang') 
insert into LTB values (2,1,'2German') 
insert into LTB values (2,2,'2English') 
insert into LTB values (2,3,'2Itailian') 
insert into LTB values (2,4,'2Free lang') 

select * from LTB 
select * from F5 

select a.*, b.Desc0 as bttyp_desc, c.Desc0 as appln_desc 
from F5 a, LTB b, LTB c 
where b.lang=1 and b.Field=a.BT_TYPE 
     and c.lang=1 and c.Field=a.appln 

Ожидаемый результат должен быть таким, как показано ниже (выделено один)

Пожалуйста, помогите мне в обрамление заявление SQL, где же имя таблицы не должны использоваться дважды.

+0

все еще не получается, что именно вы хотите ??? –

+1

Ожидаемый результат должен быть таким, как показано ниже (выделенный один). Где это? – KethanKumar

+0

и какой результат прямо сейчас вы получаете ?? –

ответ

0

Я получаю правильный вывод, но я не хочу использовать то же имя таблицы (LTB) дважды

  1. Там нет ничего плохого с присоединением LTB таблицы дважды
  2. Рассмотрите использование явного синтаксиса ANSI типа JOIN вместо неявного запятой.
  3. Не используйте SELECT a.* в производстве, вместо этого явно указывайте нужные столбцы.

Это сказанный ваш запрос может выглядеть

SELECT bt_type, appln, b.desc0 bttyp_desc, c.Desc0 appln_desc 
    FROM F5 a JOIN LTB b 
    ON b.lang = 1 
    AND a.bt_type = b.field JOIN LTB c 
    ON c.lang = 1 
    AND a.appln = c.field; 

Теперь, если по каким-то причинам вы не можете стоять присоединения LTB дважды можно переписать запрос, используя условную агрегацию

SELECT bt_type, appln, 
     MAX(CASE WHEN field = BT_TYPE THEN desc0 END) bttyp_desc, 
     MAX(CASE WHEN field = appln THEN desc0 END) appln_desc 
    FROM F5 a JOIN LTB b 
    ON b.lang = 1 
    AND (a.bt_type = b.field OR 
     a.appln = b.field) 
GROUP BY bt_type, appln 

Выхода (в обоих случаях):

 
| BT_TYPE | APPLN | BTTYP_DESC | APPLN_DESC | 
|---------|-------|------------|------------| 
|  2 |  1 | 2German |  German | 

SQLFiddle demo

+0

Помогло ли это? Вам нужна дополнительная помощь по вашему вопросу? – peterm

Смежные вопросы