2013-12-05 3 views
1

Я хотел бы обновить мою таблицу предложением WHERE, чтобы привести к моему подзапросу, как вы можете видеть в следующем запросе. Результат после выполнения запроса должен быть то, что строка с именем Робертом будет иметь значение кОбновить таблицу в MySQL с подзапросом

CREATE TABLE `table1`(
    `name` varchar(30), 
    `surname` varchar(30), 
    `nextname` varchar(30), 
    `value` bit(1) 
); 



INSERT INTO `table1` 
VALUES 
    ('Daniel', 'Hanks', 'Robert', 0), 
    ('Robert', 'Pitt', 'Angelina', 0), 
    ('Angelina', 'Jolie', 'Monica', 0), 
    ('Monica', 'Red', null, 0); 



UPDATE `table1` SET `value` = 1 
WHERE `name` IN (SELECT `nextname` FROM `table1` 
WHERE `name` = 'Daniel')¨ 

Благодарность

ответ

3

Вы не можете обновления и выберите из тех же таблиц в одном запрос. Но MySQL не поддерживает UPDATE с JOIN синтаксис:

UPDATE table1 AS t1 
INNER JOIN table1 AS t2 ON t1.name = t2.nextname 
SET t1.value = 1 
WHERE t2.name = 'Daniel' 
1

Вы также можете сделать это с некрасивым трюк:

UPDATE `table1` SET `value` = 1 
WHERE `name` IN (SELECT `nextname` FROM(SELECT `nextname` FROM `table1` 
WHERE `name` = 'Daniel')x) 
+1

Спасибо. Я пробовал это, но версия с JOIN лучше мне понять :) – Bushwacka

0

Ваш синтаксис для использования подзапроса в предложении WHERE является правильным. Но что вы пытаетесь сделать точно? Вы можете добиться того же результата без подзапроса.

UPDATE `table1` SET `value` = 1 WHERE `name` = 'Daniel' 
+0

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

+0

Это не дает того же результата. Он не обновляет строку для «Роберта». –

Смежные вопросы