Обновление записей в таблице A на основе записей в таблице B - PullRequest
2 голосов
/ 03 апреля 2011

Я должен написать оператор, который заполняет таблицу (customers) синтетически сгенерированными значениями. Существует дополнительное ограничение, заключающееся в том, что я должен только заполнять эти атрибуты (столбцы) специальным свойством (то есть формально делать проекцию на них, а затем оперировать исключительно ими). Эти свойства хранятся во второй таблице, attributes.

Мой первый черновик состоит из следующих двух утверждений:

-- Get the attributes (columns) we are interested in only
SELECT attributeID from attributes
WHERE tableID = 'customers'

-- Iterate over each row of customers, filling only those attributes (columns)
-- obtained by the above SELECT statement
UPDATE customers
   SET (use the records from above select statement...)

Теперь моя проблема в том, как собрать их вместе. Я знаю, что есть возможность добавить предложение WHERE к предложению SET, но это выберет строки, а не столбцы, как мне нужно. Я также читал о PIVOT, но пока только внутри одной таблицы, а не двух, как здесь. Я был бы очень благодарен за любую подсказку, так как я понятия не имею, как это сделать.

Ответы [ 2 ]

4 голосов
/ 04 апреля 2011

это не ты ищешь? Обновление SQL нескольких полей ОТ с помощью инструкции SELECT

UPDATE
    Table
SET
    Table.col1 = other_table.col1,
    Table.col2 = other_table.col2
FROM
    Table
INNER JOIN
    other_table
ON
    Table.id = other_table.id
2 голосов
/ 04 апреля 2011

Стандартный SQL-92 требует скалярного подзапроса:

UPDATE customers
   SET attributeID = (
                      SELECT A1.attributeID 
                        FROM attributes AS A1
                       WHERE A1.tableID = 'customers'
                     );

Однако UPDATE customers...WHERE A1.tableID = 'customers' "пахнет", как будто вы можете смешивать данные с метаданными.

...