【问题标题】:Insert Into in mysql Case when插入到mysql中的情况下
【发布时间】:2021-07-19 14:05:52
【问题描述】:

我有 2 个表,我进行了内部联接。

1)car_table

|car_id|  cars   |
|----- | -----   | 
|1     | Passat  |

2)property_model

|model_id|  p_value |
|--------|   -----  | 
|1       |   year   |
|2       |   color  |
|3       |   gear   |

3)property_value

|value_id| car_id| model_id| rs_value |
|--------|-----    | -----   | -----    |
|1       |   1     |   1     | 2020     |
|2       |   1     |   2     | Black    |
|3       |   1     |   3     | Manuel   |

我遵循了这样的方式,但代码给出了错误

INSERT INTO property_value (model_id,rs_value)
SELECT model_id,car_id
    CASE model_id
        WHEN 1 AND car_id=1  THEN '2020' 
        WHEN 2 AND car_id=1  THEN 'Black'
        WHEN 3 AND car_id=1  THEN 'Manuel' 
      
    END
FROM property_model

php如何将property_model表中的新数据添加到property_value表中?

【问题讨论】:

  • 您使用的语法没有多大意义。为什么不只使用三个独立的INSERTs,每个model_id 一个?
  • 你需要一个SELECT 子查询。
  • 您要插入新行,还是更改现有行的rs_value 列?为什么要加入要插入的表?
  • @barmar 我想添加新行示例:model=1 then '2020', model=2 then 'black' as

标签: mysql sql-insert case-when


【解决方案1】:

使用SELECT 查询作为要插入的数据源:

INSERT INTO property_value (model_id, rs_value)
SELECT model_id,
    CASE model_id
        WHEN 1 THEN '2020'
        WHEN 2 THEN 'Black'
        WHEN 3 THEN 'Automatic'
    END
FROM property_model

您还可以使用ELT() 函数在参数列表中按索引选择一个值。

INSERT INTO property_value (model_id, rs_value)
SELECT model_id, ELT(model_id, '2020', 'Black', 'Automatic')
FROM property_model

对于您的第二个查询,我想应该是这样的:

INSERT INTO property_value (model_id, car_id, rs_value)
SELECT model_id, 1,
    CASE model_id
        WHEN 1 THEN '2020' 
        WHEN 2 THEN 'Black'
        WHEN 3 THEN 'Manuel' 
      
    END
FROM property_model

【讨论】:

  • 非常感谢,但我遇到了错误。您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以了解在 ' 附近使用的正确语法
  • 抱歉,CASE 中不需要逗号。
  • 执行我,我还有一个问题。我想在 property_value 表中再添加一列。我现在编辑了,从上表中又可以看到,如何将另一个表中的数据插入到property_value表中?
  • 1. property_model 中没有 car_id 列,我猜你需要加入 car_table。 2. 您需要将car_id 添加到要插入的列列表中。 3.car_idCASE之间需要一个逗号。
  • 4.当您使用CASE columnName 时,WHEN 子句只是与columnNAme 比较的单个值。如果您想要更复杂的条件,则必须将两个条件都放在 WHEN 子句中,例如WHEN model_id = 1 AND car_id = 1 THEN '2020'
猜你喜欢
  • 1970-01-01
  • 2014-05-03
  • 2023-03-31
  • 1970-01-01
  • 2018-09-25
  • 1970-01-01
  • 2018-03-20
  • 2015-06-28
  • 1970-01-01
相关资源
最近更新 更多