Вставить строку со значениями из нескольких таблиц (SQL Server) - PullRequest
1 голос
/ 16 ноября 2010

Я определяю триггер удаления и мне нужно сделать резервную копию удаленной строки, но только несколько аргументов из оригинала и один столбец из другой таблицы:
TableC:
* Столбец 1: значение из столбца в Таблице A
* Столбец 2-6: значения из столбцов 1,2,3,5,6 из Таблицы B

Все, что я хочу, это что-то вроде этого:

INSERT into TableC values (<br> (SELECT Column1A from TableA where TableA.Column = 'SomeValue'),<br> (SELECT column1, column2, column3, column5, column6 from TableB));

Результат на TableC должен быть:
Столбец1А, столбец1, столбец2, столбец3, столбец5, столбец6

Но это не работает. В моем особом случае TableB - это удаленная таблица, доступная только в триггерах.

Я использую SQL-Server 2008, но все, что мне нужно, это логика запроса, а затем я пытаюсь перевести его.

Спасибо.

Ответы [ 3 ]

1 голос
/ 16 ноября 2010

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

INSERT INTO MyTable
SELECT 
    (SELECT ColumnA FROM Table1),
    Table2.ColumnA,
    Table2.ColumnB,
    Table2.ColumnC,
    Table2.ColumnD
FROM
    Table2

Таким образом, вы выбираете только один столбец из Table1, но выбираете множество столбцов из Table2, независимо от какой-либо связи между ними.

1 голос
/ 16 ноября 2010

Вы можете использовать cross join для объединения несвязанных таблиц:

INSERT  MyTable
        (col5, col7)
SELECT  t1.col5
,       t2.col7
FROM    Table1 t1
CROSS JOIN 
        Table2 t2
WHERE   t1.ID = 'SomeValue'
        and t2.ID = 'OtherValue'

Если одна из таблиц содержит только одну строку, вы можете опустить для нее часть where.

1 голос
/ 16 ноября 2010

Вам нужно сделать объединения в select.
Вот пример:

INSERT INTO MyTable
SELECT 
    Table1.ColumnA,
    Table1.ColumnB,
    Table2.ColumnA,
    Table2.ColumnB
FROM
    Table1
    INNER JOIN Table2 ON Table1.ID = Table2.ID  

Это всего лишь пример «вставки из двух таблиц».
Вам нужно изменить его насоответствовать тому, что вы ищете, что я не понял из вашего произвольного примера.

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