【问题标题】:How to update column values depending on another column's values with CASE WHEN in SQL如何在 SQL 中使用 CASE WHEN 根据另一列的值更新列值
【发布时间】:2020-08-10 00:45:52
【问题描述】:

我有一个名为 groovers 的 MySQL 数据库表,在这个表中我有一个 gender 列和 profileImage 列,我想根据 gender 更改列 profileImage 的所有值价值在哪里 如果gender='男'然后profileImage='imgM' 如果gender='Female' 那么profileImage='imgF' 如果'未指定'然后profileImage='默认' 我有一排是男性,另一排是女性,当我执行代码时,profileImage 不会改变。 这是我的 SQL 代码:

SELECT gender, profileImage,
    CASE
        WHEN gender ='Male'
        THEN profileImage = 'imgM'

        WHEN gender = 'Female'
        THEN profileImage = 'imgF'

        ELSE profileImage = 'default'

        END
FROM
    groovers

这是我的桌子

CREATE TABLE groovers
(
    user_id         INT AUTO_INCREMENT PRIMARY KEY,
    username        VARCHAR(40)                                                  NOT NULL,
    firstName       VARCHAR(40)                                                  NOT NULL,
    lastName        VARCHAR(40)                                                  NOT NULL,
    gender          enum ('Male', 'Female', 'Unspecified') default 'Unspecified' NOT NULL,
    email           VARCHAR(255)                                                 NOT NULL,
    password        VARCHAR(32)                                                  NOT NULL,
    profileImage    VARCHAR(255)                                                 NOT NULL,
);

【问题讨论】:

  • 请向我们展示您的表格的数据,因为我看到一个枚举作为创建表格请
  • @nbk 我编辑了问题,你现在可以看到 te 表

标签: mysql sql database datatable


【解决方案1】:

当然不会改变。您添加了 第三个​​ 列。如果您想在 select 中执行此操作,只需命名新列并删除旧列:

SELECT gender,
       (CASE WHEN gender ='Male' THEN 'imgM'
             WHEN gender = 'Female' THEN 'imgF'
             ELSE 'default'
        END) as profileImage
FROM groovers;

您可以使用update 在表格本身中更改此设置。

【讨论】:

  • 它不起作用,第一行的gender 是“男性”,profileImage 仍然是“默认”,第二行的gender 是“女性”也是如此'。 gender 的数据类型与此有关吗?因为它不是VARCHAR 它是ENUM('Male','Female','Unspecified')
  • @WassimTahraoui 。 . .正如我在答案中所说,这在SELECT 中提供了正确的值。您需要一个UPDATE 来实际更改表中的值。
【解决方案2】:

您想更新表格 使用

UPDATE groovers
SET profileImage = CASE WHEN gender = 'male' THEN 'imgM'
                        WHEN gender = 'female' THEN 'imgF'
                        ELSE 'default' END;

架构 (MySQL v5.7)

CREATE TABLE groovers
(
    user_id         INT AUTO_INCREMENT PRIMARY KEY,
    username        VARCHAR(40)                                                  NOT NULL,
    firstName       VARCHAR(40)                                                  NOT NULL,
    lastName        VARCHAR(40)                                                  NOT NULL,
    gender          enum ('Male', 'Female', 'Unspecified') default 'Unspecified' NOT NULL,
    email           VARCHAR(255)                                                 NOT NULL,
    password        VARCHAR(32)                                                  NOT NULL,
    profileImage    VARCHAR(255)                                                 NOT NULL
);

INSERT INTO groovers VALUES (0,'test','test','test','male','test@test.com','a',''),
(0,'test','test','test','female','test@test.com','a',''),
(0,'test','test','test','Unspecified','test@test.com','a','');

UPDATE groovers
SET profileImage = CASE WHEN gender = 'male' THEN 'imgM'
                        WHEN gender = 'female' THEN 'imgF'
                        ELSE 'default' END;

查询 #1

SELECT * FROM groovers;

| user_id | username | firstName | lastName | gender      | email         | password | profileImage |
| ------- | -------- | --------- | -------- | ----------- | ------------- | -------- | ------------ |
| 1       | test     | test      | test     | Male        | test@test.com | a        | imgM         |
| 2       | test     | test      | test     | Female      | test@test.com | a        | imgF         |
| 3       | test     | test      | test     | Unspecified | test@test.com | a        | default      |

View on DB Fiddle

【讨论】:

    【解决方案3】:

    您只需使用以下查询

    update groovers set
         profileImage = (CASE WHEN gender ='Male' THEN 'imgM'
                 WHEN gender = 'Female' THEN 'imgF'
                 ELSE 'default'
                END);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-15
      • 1970-01-01
      • 2019-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-17
      相关资源
      最近更新 更多