select - 如果存在则选择值或从另一个表中选择默认值
问题描述
我有一个用户偏好表 - 'pr_gantt_config' 和一个图表所有可配置元素的默认值表 - 'pr_gantt'。我希望这个查询会返回用户表达的偏好或来自 pr_gantt 的所有可配置值的默认值,但我只得到用户表达偏好的行。我知道我可以针对每个值为每个用户存储一个值,但这感觉效率低下。
SELECT `code`,
`pref`,
`type`,
Ifnull(`pref`, `pr_gantt`.`default_value`) AS `pref`
FROM `pr_gantt_config`
LEFT JOIN `pr_gantt`
ON ( `pr_gantt_config`.`gantt_id` = `pr_gantt`.`id` )
WHERE `pr_gantt_config`.`user_id` = '1'
非常感谢您的帮助。
解决方案
解决方法是首先创建两个表的视图。
CREATE VIEW temp AS
SELECT code, pref, type,pref, pr_gantt.default_value FROM pr_gantt_config
LEFT JOIN pr_gantt ON (pr_gantt_config.gantt_id = pr_gantt.id) WHERE
pr_gantt_config.user_id = '1'
然后用 IFNULL 选择
SELECT code,type, IFNULL(pref, pr_grannt.default_value) FROM temp
推荐阅读
- c++ - WSL 中的奇怪输出编码
- python - 如何使用带有 FFmpeg 的 Python 自动剪切视频?
- docker - 如何在 Dockerfile 中创建目录
- reactjs - 如何在自定义挂钩中获取数据并将其分派到上下文
- python - plt.scatter 图的 x 轴上的月份数
- python - Pandas 等效于带有列表/元组/迭代的 SQL 的“Where In”
- python - 程序的睡眠时间比预期的要长 - Python Tkinter
- r - 什么是几何形态学中的异速生长,使用 procD.lm 函数
- python - 使用标签更新 Tkinter 文本
- c++ - 循环包含在 MinGW 中的模板化函数