SQL查询联接两个表并获取数据?

时间:2018-12-18 17:54:21

标签: mysql sql

我有两个桌子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.id1table1.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;

是否有更好的方法编写此查询?

2 个答案:

答案 0 :(得分:3)

我认为您的查询本质上是不错的。我将改善两个方面:

  • 使用现代联接语法。
  • 如果外键(id1和id2)可为空(您不说),我将使用外部联接。

查询的修改后的版本如下:

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;