从另一个表中选择是否存在或默认的值

时间:2018-09-29 10:03:53

标签: select default ifnull

我有一个用户首选项表-'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' 

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

一项工作是首先创建两个表的视图。

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