我有两个桌子。
表“设置”包含用户可以启用的所有设置。 表“ UserSettings”包含用户已启用的所有设置。
我想返回“表设置”中的所有行,以及是否已由特定用户将其保存在“用户设置”中。
使用每个表中的“ settingid”行链接表。
我已经尝试过使用左联接。那是最好的选择吗?
答案 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