обновить -sql -query - PullRequest
       12

обновить -sql -query

1 голос
/ 09 июля 2019

Я пытаюсь обновить таблицу (emp) в MySql.Есть ли способ написать следующие 3 запроса как один?

update emp set name=?,sal=? where id=?;
update emp set name=? where id=?;
update emp set sal=? where id=?;

любая помощь будет высоко оценена!

Ответы [ 3 ]

0 голосов
/ 09 июля 2019

Я бы предложил что-то вроде этого:

update emp set name = case when id = ? then 'name' else name end, 
               sal = case when id = ? then 2000 else sal end 
where id in (?, ?, ?)

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

Пример:

update emp set name = case when id in (1, 2) then 'name' else name end,
               sal = case when id in (2, 3) then 2000 else sal end
where id in (1, 2, 3)

Для id = 2 оба поля будут обновлены.

0 голосов
/ 09 июля 2019

Я интерпретирую вопрос, как вы хотите обновить один или два столбца для данного идентификатора. Если так:

update emp
    set name = coalesce(?, name),
        sal = coalesce(?, sal)
     where id = ?;

Если вы передадите любой из первых двух параметров как NULL, то значения соответствующих столбцов не изменятся.

0 голосов
/ 09 июля 2019

Я также ищу способ, где это возможно. Но я не нашел ни одного. Одним из решений является INSERT ON DUPLICATE KEY UPDATE, и в этом случае у вас должен быть один запрос на вставку для всех ваших обновлений для таблицы, как показано ниже:

INSERT INTO emp (id, name, sal) 
VALUES
(34, 'Amjad', 25000),
(100, 'Irfan', 50000),
(643, 'Haris', 40000)
ON DUPLICATE KEY UPDATE name = VALUES(name), sal = VALUES(sal);

но для того, чтобы это работало для вас, в столбце идентификатора должен быть либо PK, либо уникальный ключ. так что если запись с данным идентификатором уже существует, она обновит имя и зарплату для данной записи.

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