连接两个表以返回一个表中的所有行,并返回另一表的状态

时间:2019-01-29 01:12:38

标签: mysql

我有两个桌子。

表“设置”包含用户可以启用的所有设置。 表“ UserSettings”包含用户已启用的所有设置。

我想返回“表设置”中的所有行,以及是否已由特定用户将其保存在“用户设置”中。

使用每个表中的“ settingid”行链接表。

我已经尝试过使用左联接。那是最好的选择吗?

1 个答案:

答案 0 :(得分:0)

类似这样的东西:

SELECT s.settingid 
     , u.settingid IS NOT NULL   AS is_set 
  FROM setting s
  LEFT
  JOIN user_setting u 
    ON u.user_id   = ? 
   AND u.settingid = s.settingid
 ORDER
    BY s.settingid   

我们使用外部联接从user_setting中拉出匹配的行。外部联接允许返回不匹配的行,因此我们从setting获取所有行。

不匹配的行将对user_setting中的列具有所有NULL值。

我们可以在SELECT列表中扩展第二个表达式。我们只是测试是否找到匹配的行,如果有匹配的行,则返回1,否则返回0。

     , IF(u.settingid IS NULL,0,1) AS is_set 

或更符合ANSI便携式标准...

     , CASE WHEN u.settingid IS NULL THEN 0 ELSE 1 END AS is_set