【问题标题】:Inserting a value from another table based on the difference of two other column values根据其他两个列值的差异从另一个表中插入一个值
【发布时间】:2018-02-09 16:07:52
【问题描述】:

我正在尝试将列值添加到当前的插入/选择语句中,但我不确定是否可以使用 CASE WHEN 子句或者是否需要以其他方式执行此操作。

基本上,我的主表中有一个电话号码列。我需要从另一个表中插入一个号码,但另一个表有 2 个不同的电话号码列,具体取决于呼叫类型。例如:

CALLINGPARTYNO | FINALLYCALLEDPARTYNO | CALLTYPE
------------------------------------------------
1234567890        0987654321              1
0987654321        1234567890              2

所以我需要做的是指定将哪个号码放入表 1 中的 phoneNumber 列。如果呼叫类型为 1,我想插入来自 FINALLYCALLEDPARTYNO 的号码,但如果呼叫类型为 2,我想插入来自 CALLINGPARTYNO 的号码。

如果有帮助的伪代码:

Insert into table1(phoneNumber)
SELECT case when /*if calltype = 1, then select FINALLYCALLEDPARTYNO*/
    ELSE /*if calltype=2 then select CALLINGPARTYNO */ as phoneNumber

from table2;

有没有办法用 CASE 做到这一点,还是有其他方法?寻找最理想的方法来执行此操作,以便我可以将其添加到更大的插入语句中。

【问题讨论】:

    标签: mysql sql case insert-select


    【解决方案1】:

    您可以在插入-选择语句中使用任何可以在选择语句中使用的语法结构:

    INSERT INTO table1(phoneNumber)
    SELECT CASE calltype WHEN 1 THEN finallycalledpartyno
                         WHEN 2 THEN callingpartyno
           END
    FROM   table2
    

    【讨论】:

    • 完美,谢谢!因为,我正在使用其他选定值连续执行此操作,我可以将 AS phoneNumber 添加到 END 语句吗?
    • @TomN。是的。 CASE ... END 中的所有内容都是一个很长的表达式,您可以像对任何其他列一样为其应用名称。
    • @TomN。是的你可以。整个 case ... end 是一个(尽管很复杂)表达式。请注意,添加这样的别名只会帮助您更轻松地阅读查询。它没有功能影响(假设您的查询没有一堆实际直接使用此别名的其他部分)。
    猜你喜欢
    • 2018-06-20
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多