我有两个桌子a,b。
表table1
有5列:
primary key AS pkid
table2_primary-key AS id1
table2_primary-key AS id2
rating
date
表table2
有2列:
primary key AS pkid
name
我希望将table1加入table2并显示table1中的主键,等级和日期,以及与table1.id1
和table1.id2
对应的名称。
为此,我编写了以下查询
Select
a.pkid
, b.name
, c.name
, a.rating
, a.date
FROM table1 a, table2 b, table2 c
WHERE a.id1=b.pkid and a.id2=c.pkid;
是否有更好的方法编写此查询?
答案 0 :(得分:3)
我认为您的查询本质上是不错的。我将改善两个方面:
查询的修改后的版本如下:
select
a.pkid, b.name,
case when c.name is null then 'system' else c.name end,
a.rating, a.date
from table1 a
left join table2 b on a.id1 = b.pkid
left join table2 c on a.id2 = c.pkid
答案 1 :(得分:1)
您将始终需要两个联接(因为id1和id2不同)...
但是,我将使用显式联接而不是逗号。就这样
SELECT A.PKID, B.NAME, C.NAME, A.RATING, A.NAME
FROM TABLE1 A
LEFT JOIN TABLE2 B ON A.ID1=B.PKID
LEFT JOIN TABLE2 C ON A.ID2=C.PKID;