Как обновить значения столбца в зависимости от значений другого столбца с помощью CASE WHEN в SQL - PullRequest
1 голос
/ 26 апреля 2020

У меня есть таблица базы данных MySQL с именем groovers, в этой таблице у меня есть столбец gender и столбец profileImage, я хочу изменить все значения столбца profileImage в зависимости от того, что gender значение - это где, если gender = 'мужчина', то profileImage = 'imgM', если gender = 'женщина', то profileImage = 'imgF', если 'не указано', то profileImage = 'по умолчанию' I у меня есть строка с мужским полом и другая строка с женским полом, когда я выполняю код, 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,
);

Ответы [ 3 ]

1 голос
/ 26 апреля 2020

Конечно, это не меняется. Вы добавили третий столбец. Если вы хотите сделать это в select, просто назовите новый столбец и удалите старый:

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

Вы можете изменить это в самой таблице, используя update.

0 голосов
/ 26 апреля 2020

Просто вы можете использовать следующий запрос

update groovers set
     profileImage = (CASE WHEN gender ='Male' THEN 'imgM'
             WHEN gender = 'Female' THEN 'imgF'
             ELSE 'default'
            END);
0 голосов
/ 26 апреля 2020

Вы хотите обновить таблицу, используя

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      |

Показать на БД Fiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...