【问题标题】:select value if exists or default from another table如果存在则选择值或从另一个表中选择默认值
【发布时间】:2019-03-05 03:45:15
【问题描述】:

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

非常感谢您的帮助。

【问题讨论】:

    标签: select default ifnull


    【解决方案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
    

    【讨论】:

    • 谢谢。不幸的是,这会为我在用户首选项表中的两个项目产生两个空行。这是稍微修改的查询 CREATE OR REPLACE VIEW temp AS SELECT code, pref, type, pr_gantt.default_value FROM pr_gantt_config LEFT JOIN pr_gantt ON (pr_gantt ON (@98765) 987654332@ = pr_gantt.id) WHERE pr_gantt_config.user_id = '1' and SELECT code,type, IFNULL(pref, default_value) FROM @98 >
    猜你喜欢
    • 1970-01-01
    • 2014-02-21
    • 1970-01-01
    • 2015-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    • 1970-01-01
    相关资源
    最近更新 更多