【问题标题】:MySQL column with conditional value具有条件值的 MySQL 列
【发布时间】:2016-11-09 15:58:14
【问题描述】:

我有这个基本的 SQL 语句:

SELECT p.s1,pr.s1 FROM `prop` p LEFT OUTER JOIN prom pr ON pr.id = p.prom

我的意图是有一个值为pr.s1 的列(如果它不为空),而p.s1 在其他情况下。这很简单,但我不知道如何正确地做到这一点。

任何想法将不胜感激,谢谢。

【问题讨论】:

    标签: mysql case conditional-statements


    【解决方案1】:

    你可以使用IFNULL:

    SELECT IFNULL(pr.s1, p.s1) AS s1
    FROM `prop` p
    LEFT OUTER JOIN prom pr
        ON pr.id = p.prom
    

    【讨论】:

    • 这是一个简单的改变
    【解决方案2】:

    您也可以使用COALESCE

    SELECT COALESCE(pr.s1, p.s1)
    FROM prop p
    LEFT OUTER JOIN prom pr
        ON pr.id = p.prom
    

    使用COALESCE() 而不是IFNULL() 的一个好处是前者可以接受两个以上的参数。因此,例如,如果您有两个备份列以防 NULL 值,您可以这样做:

    SELECT COALESCE(pr.s1, p.s1, p.someOtherCol)
    

    【讨论】:

    • 感谢您的解释!
    【解决方案3】:

    你可以使用COALESCE()

    SELECT p.s1,COALESCE(pr.s1,p.s1) 
    FROM `prop` p 
    LEFT OUTER JOIN prom pr
     ON pr.id = p.prom
    

    虽然您可能有两个相同的列,但我认为您的意思是:

    SELECT COALESCE(pr.s1,p.s1) as s1
    FROM ...
    

    【讨论】:

      【解决方案4】:

      你可以使用 ifnull

       SELECT p.s1, ifnull(pr.s1, p.s1) 
       FROM `prop` p 
       LEFT OUTER JOIN prom pr ON pr.id = p.prom
      

      【讨论】:

        猜你喜欢
        • 2013-09-15
        • 2022-01-07
        • 1970-01-01
        • 1970-01-01
        • 2019-08-15
        • 1970-01-01
        • 2023-02-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多