首页 > 解决方案 > 如果存在则选择值或从另一个表中选择默认值

问题描述

我有一个用户偏好表 - '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' 

非常感谢您的帮助。

标签: selectdefaultifnull

解决方案


解决方法是首先创建两个表的视图。

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

推荐阅读