Обновить таблицу на основе объединения трех таблиц: Помогите, пожалуйста - PullRequest
0 голосов
/ 08 июля 2011

У меня есть следующие 3 таблицы:

storage (
id, 
client, 
cost, -- which have no values
col_1, -- which have no values
col_2, -- which have no values
col_3, -- which have no values
and other columns
)

output(
id, 
client, 
col_1,
col_2,
col_3
)

ad(
id, 
client,
cost,
and other colums
)

таблица хранения имеет 170 строк, вывод - 50, а таблица объявлений - 1000 строк.

Что мне нужно, так это обновить storage.cost со значениями из ad.cost, обновить storage.col_1, storage.col_2, storage.col_3 со значениями output.col_1, output.col_2, output.col_3 на основевключиться в колонку клиента среди 3 таблиц.

Если запрос на обновление невозможен, тогда мне нужно выбрать запрос на основе объединения по столбцу клиента среди 3 таблиц, чтобы я мог вставить его в другую таблицу и использовать эту таблицу вместо хранилища.Мне нужны все столбцы из хранилища, col_1, col_2, col_3 из вывода и стоимость из таблицы объявлений и 170 строк, чтобы запрос на обновление не требовался, и я могу использовать эти 170 строк в качестве таблицы хранения.

Пожалуйста, помогите.

1 Ответ

1 голос
/ 08 июля 2011

На мой взгляд, модель базы данных неверна.

Почему бы вам не создать представление v_storage на основе других таблиц:

CREATE VIEW v_storage AS 
    SELECT o.client, a.cost, o.col_1, o.col_2, o.col_3, s.other_columns 
    FROM output AS o 
    JOIN ad AS a ON a.client = o.client 
    JOIN storage AS s ON s.client = o.client

И удалите дубликаты столбцов cost, col_N из таблицы хранения.

РЕДАКТИРОВАНИЕ:

Но если вам все еще нужен ответ на заданный вопрос, вы можете указать несколько таблиц в своем выражении UPDATE и использовать таблицы для их выбора:

UPDATE storage, output, ad
    SET storage.cost = ad.cost, storage.col_1 = output.col_1, ...
WHERE output.client = storage.client
AND ad.client = storage.client
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...