【问题标题】:Select default value from one table by joining itself通过加入自身从一个表中选择默认值
【发布时间】:2017-06-19 11:47:58
【问题描述】:

例如,我在 t_shops 中有一个表和 3 个 NOT NULL 列:id、name、locale。语言环境列的默认值为“”空字符串。如果 where 语句与 AND 不匹配,我需要选择默认值,我需要通过加入同一个表并传递给 COALESCE 函数来做到这一点。我知道如何通过 WHERE 子句中的 COALESCE 和 UNION ALL 来做到这一点,但我需要加入

SELECT COALESCE(arg1.locale, 'default') currentLocale
    ,A.*
FROM t_product_attrs A
INNER t_product_attrs arg1
    ON A.locale = arg1.locale
        AND A.product_id = arg1.product_id
WHERE arg1.locale = 'not what i have in DB'
    AND arg1.product_id = 100101

【问题讨论】:

  • (1) 我删除了不兼容的数据库标签。请仅使用您正在使用的数据库进行标记。 (2) 提供样本数据和期望的结果。
  • 如果你使用的是MsSql,你也可以结合NULLIF(arg1.locale, ' ')

标签: sql postgresql


【解决方案1】:

我想你想要一个left join:

SELECT COALESCE(arg1.locale, 'default') as currentLocale, A.*
FROM t_product_attrs A INNER
     t_product_attrs arg1
     ON A.locale = arg1.locale AND
        A.product_id = arg1.product_id  AND
        arg1.locale = 'not what i have in DB' AND
        arg1.product_id = 100101;

【讨论】:

    猜你喜欢
    • 2019-03-05
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    • 2017-02-12
    • 2015-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多