【问题标题】:If column value is null, use other column如果列值为空,则使用其他列
【发布时间】:2013-09-01 23:33:33
【问题描述】:

首先,不要责备我尝试这样做 - 我的老板希望我将跨多个表的数据列表转储到单个 CSV 文件中。

此 CSV 包含合并到一张表中的两类人员:永久员工承包商

根据您所属的类别,某些值的获取方式会有所不同。例如,如果您是承包商,您的职位描述为contractors.blended_role。如果您是永久的,则职位描述位于roles.blended_role,其中roles.id = staff.role

所以我尝试了(类似的):

SELECT
    stuff,
    (CASE
        WHEN c.blended_role IS NULL THEN
            r.blended_role
        ELSE
            c.blended_role
        END) as `Job Description`,
    morestuff
FROM
    everyone e
LEFT JOIN contractors c
    ON c.id = e.id
LEFT JOIN staff s
    ON s.id = e.id
LEFT JOIN roles r
    ON r.id = s.role

但我遇到了语法错误

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'stuff, (CASE WHEN c.blended_role IS NULL THEN r.blended_role EL` at line 2

谁能提出替代方案?

更新

语法错误来自缺少逗号的几行。

【问题讨论】:

  • 请发布您遇到的错误
  • 您应该发布确切的错误。首先,我认为 CASE 结构中的表别名应该是 cr 而不是 cvrv
  • @Vimsha 实际错误包含我不想让你知道的真实列名 - 我将发布一个与我得到的相同的错误。
  • @vollie 如果你知道答案,请写下答案,而不是评论!

标签: mysql sql join csv


【解决方案1】:

您没有名为 rvcv 的表别名。也许你的意思是:

SELECT
    (CASE
        WHEN c.blended_role IS NULL THEN
            r.blended_role
        ELSE
            c.blended_role
        END) as `Job Description`

或者,更简单地说:

coalesce(c.blended_role, r.blended_role) . . .

【讨论】:

  • 对不起,是的,我在真正的 SQL 中使用 'rv' 和 'cv'。我会尝试合并!
【解决方案2】:

我觉得你也可以用

SELECT
    stuff,
    ifnull(c.blended_role,r.blended_role) as `Job Description`,
    morestuff
FROM
    everyone e
LEFT JOIN contractors c
    ON c.id = e.id
LEFT JOIN staff s
    ON s.id = e.id
LEFT JOIN roles r
    ON r.id = s.role

查看http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#function_ifnull 了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-15
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多