首页 > 解决方案 > 连接两个表以返回一个表中的所有行及其在另一个表中的状态

问题描述

我有两张桌子。

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

我想返回表格设置中的所有行,以及它们是否已被特定用户保存在 UserSettings 中。

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

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

标签: mysql

解决方案


像这样的东西:

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.

没有匹配的行将具有来自 的列的所有 NULL 值user_setting

我们可以展开 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 

推荐阅读