Скажем, у меня есть этот оператор выбора:SQL обновление соединяемых таблиц
SELECT ut.user_id,
a.firstname,
a.surname,
u.username,
u.email_address
FROM administrators a
JOIN user_types ut JOIN users u ON a.admin_id = ut.type_id
AND u.user_id = ut.user_id AND ut.user_type = 'ADMIN';
сказать, что я хотел, чтобы обновить все значения в строке, где user_id = 1;
Я мог бы обновить каждую таблицу индивидуален или я мог бы создать представление, как так:
CREATE OR REPLACE VIEW full_admin AS
SELECT ut.user_id,
a.firstname,
a.surname,
u.username,
u.email_address
FROM administrators a
JOIN user_types ut
JOIN users u on a.admin_id = ut.type_id
AND u.user_id = ut.user_id
AND ut.user_type = 'ADMIN'
Тогда я мог бы написать:
UPDATE full_admin
SET firstname = 'blah', etc, etc
WHERE user_id = 1;
И обновит все строки во всех таблицах
Есть ли способ сделать это БЕЗ создания представления?
Что-то вроде:
UPDATE (
SELECT ut.user_id,
a.firstname,
a.surname,
u.username,
u.email_address
FROM administrators a
JOIN user_types ut
JOIN users u ON a.admin_id = ut.type_id
AND u.user_id = ut.user_id
AND ut.user_type = 'ADMIN'
)
AS temp_table
SET firstname = "ALEX"
WHERE user_id = 1;
Однако это не работает
Если вы хотите обновить столбцы администраторов и пользователей одновременно, то посмотрите на это: http://stackoverflow.com/questions/6362594/a-conditional- SQL-обновление-заявление-для-двух таблиц-на-один раз. Если вы хотите просто обновить столбцы в администраторах на основе присоединения к пользователям, посмотрите на это: http://stackoverflow.com/questions/1293330/how-can-i-do-an-update-statement-with-join- в-SQL. – dash