我是SQL的新手。请帮助我为下面的场景构建一个SQL语句。
我有两张桌子,想加入两张桌子。下面你可以找到我用来加入的陈述。
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 :(得分:0)
我得到了正确的输出,但我不想两次使用相同的表名(LTB)
LTB
表JOIN
语法,而不是隐式的基于逗号的语法。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 演示