我正在定义一个删除触发器,我需要备份已删除的行但只包含原始的一些参数,并包括其他表中的一列:
表C:
*第1列:表A中列的值
*第2至6列:来自TableB的第1,2,3,5,6列的值
我想要的就是这样:
INSERT into TableC values (
(SELECT Column1A from TableA where TableA.Column = 'SomeValue'),
(SELECT column1, column2, column3, column5, column6 from TableB));
TableC上的结果必须是:
Column1A,column1,column2,column3,column5,column6
但这不起作用。 在我的特殊情况下,TableB是只能在触发器中访问的已删除表。
我正在使用SQL-Server 2008,但我需要的只是查询的逻辑,然后我尝试翻译它。
谢谢。
答案 0 :(得分:1)
您需要在选择上进行连接 这是一个例子:
INSERT INTO MyTable
SELECT
Table1.ColumnA,
Table1.ColumnB,
Table2.ColumnA,
Table2.ColumnB
FROM
Table1
INNER JOIN Table2 ON Table1.ID = Table2.ID
这只是“从两张桌子插入”的一个例子 你需要修改它以匹配你正在寻找的东西,我从你任意的例子中无法理解。
答案 1 :(得分:1)
在另一个案例中,我真的觉得很奇怪,可能更接近你所描述的内容,这可能有用:
INSERT INTO MyTable
SELECT
(SELECT ColumnA FROM Table1),
Table2.ColumnA,
Table2.ColumnB,
Table2.ColumnC,
Table2.ColumnD
FROM
Table2
这样,您只需从Table1
中选择一列,但从Table2
中选择多列,无论它们之间是否存在任何关系。
答案 2 :(得分:1)
您可以使用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
部分。