Обновите поле благодаря подзапросу, основанному на другом поле - PullRequest
2 голосов
/ 15 июня 2010

Я использую базу данных MySQL, и я хотел бы обновить поле в таблице на основе другого.Что-то вроде:

UPDATE table1
SET field1 = table2.id
WHERE field2 IN (
    SELECT table2.name
    FROM table2
    );

Я знаю, что этот запрос не будет работать, но вот идея.Это вообще возможно сделать?

1 Ответ

3 голосов
/ 15 июня 2010

Вы можете использовать коррелированный подзапрос, как показано ниже. Это предполагает, что будет возвращено ровно одно совпадающее значение. Он выдаст ошибку, если будет возвращено более одного совпадающего значения, или установит для поля значение null, если возвращается ноль Если это последнее поведение нежелательно, вам понадобится предложение where.

UPDATE table1
SET field1 = (SELECT DISTINCT table2.ValueColumn 
              FROM table2 
              WHERE table2.JoinColumn = table1.JoinColumn)

Редактировать

Для просмотра записей с 0 или более 1 совпадениями вы можете использовать

SELECT table1.JoinColumn, COUNT(DISTINCT table2.ValueColumn)
FROM table1 
LEFT JOIN table2
ON table2.JoinColumn = table1.JoinColumn
GROUP BY table1.JoinColumn
HAVING COUNT(DISTINCT table2.ValueColumn) <> 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...