mysql - 连接两个表以返回一个表中的所有行及其在另一个表中的状态
问题描述
我有两张桌子。
表“设置”包含用户可以启用的所有设置。表“UserSettings”包含用户启用的所有设置。
我想返回表格设置中的所有行,以及它们是否已被特定用户保存在 UserSettings 中。
使用每个表中的“settingid”行链接表。
我已经尝试过使用左连接。那是最好的选择吗?
解决方案
像这样的东西:
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
推荐阅读
- javascript - NestJs:确保你的班级用合适的装饰器装饰
- python-3.x - 运行一个并行进程,保存 Python 中主进程的结果
- authentication - Google IAM 或 IBM IAM 能否被外部微服务用作身份验证服务?
- java - SLF4J:类路径包含多个 SLF4J 绑定警告
- php - 使用 php 访问带有 aws 结果的数组的问题
- javascript - 下载 Excel 在 Postman 中有效,但在 Javascript 中无效
- python - 在 Python 中使用 Panda 添加列和索引以求和值
- nginx - Nginx 检测 301 请求
- flutter - 本机文件路径
- angular - 从角度 scss 文件中选择类