我有两张一对一的关系表。 Table1有一个由大约4列组成的复合主键。 Table2的外键设置为Table1的主键。
当我尝试以下UPDATE子句时,出现错误:
UPDATE Table2
SET column1 = fakeTable.c1
FROM Table2 INNER JOIN
(
SELECT Table1.primaryKey
, (Table1.column3 + Table1.column4) AS c1
FROM Table1
) AS c1
ON Table2.foreignKey = fakeTable.primaryKey
我是否不允许引用键,就像它们是列一样?
答案 0 :(得分:4)
不,您需要单独列出所有字段。但是你可以避免你拥有的子查询...
UPDATE
Table2
SET
column1 = Table1.column3 + Table1.column4
FROM
Table2
INNER JOIN
Table1
ON Table2.foreignKey1 = Table1.primaryKey1
AND Table2.foreignKey2 = Table1.primaryKey2
AND Table2.foreignKey3 = Table1.primaryKey3
AND Table2.foreignKey4 = Table1.primaryKey4
编辑
对评论的回应:
- I thought the whole point of keys was to avoid having to concatenate columns!
密钥不是节省时间的设备,它们是数据完整性设备。
主键是唯一标识符。我可以是一个复合或不复合,但重要的是它是独特的而不是可空的。
外键也是数据完整性设备。它确保如果数据引用另一个表中的某些内容,它实际上必须存在于另一个表中。
答案 1 :(得分:2)
不,您不能像引用列那样引用键。您需要在子select
和join
的{{1}}子句中列出PK和FK中的所有列。