SQL обновление с объединенными таблицами - PullRequest
0 голосов
/ 08 февраля 2012

Скажите, что у меня есть это предложение выбора:

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;

Однако это не работает

Ответы [ 3 ]

1 голос
/ 08 февраля 2012

Если вы хотите обновить столбцы как у администраторов, так и у пользователей одновременно, то что-то вроде этого должно помочь:

UPDATE administrators a  
        INNER JOIN user_types ut ON a.admin_id = ut.type_id 
        INNER JOIN users u ON u.user_id = ut.user_id 
            SET u.firstname = "ALEX", a.SomeColumn = 'X' 
        WHERE u.user_id = 1 
                 AND ut.user_type = 'ADMIN' 

Секция оператора SET может работать с любым изстолбцы в соединении.

(Если это то, что вы просите!)

0 голосов
/ 08 февраля 2012

Вы можете выполнять некоторые сценарии (PLSQL), но я не верю, что вы можете обновить несколько таблиц в одном запросе SQL, кроме как через представление.

PLSQL является мощным и не сложным и может быть запущен базой данныхСобытия.

0 голосов
/ 08 февраля 2012
UPDATE administrators a 
INNER JOIN user_types ut ON a.admin_id = ut.type_id
INNER JOIN users u ON u.user_id = ut.user_id AND ut.user_type = 'ADMIN'
SET u.firstname = "ALEX"
WHERE u.user_id = 1
;

Конечно, это будет работать только (то же самое относится и к представлению), если конструкция объединенной таблицы является обновляемой.

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