3

我有时需要在加入时运行基本更新。例如:

UPDATE t1 SET col1 = 'val1'
FROM table1 as t1
INNER JOIN table2 as t2
ON t1.ID = t2.t1_id
WHERE t2.col3 = 'val3'

这工作得很好,但出于某种原因,在 MS SQL Management Studio Express 中,它希望将其转换为

UPDATE t1 SET col1 = 'val1'
FROM table1 as t1
INNER JOIN table2 as t2
ON t1.ID = t2.t1_id
CROSS JOIN t2
WHERE t2.col3 = 'val3'

由于某种我不明白的原因,它添加了交叉连接。

现在我的问题是:为什么 Management Studio 认为这就是我的意思?它必须有真正的用途,否则它不会建议它。然而我不知道如何以及何时(以及为什么)。

4

2 回答 2

2

这一定是一个错误,因为您的第一个代码是正确的。

尝试

更新 t1 set col1 = 'val1' from table1 t1, table2 t2 where t1.id = t2.t1_id and t2.col3='val3'

它会产生相同的结果,但效率可能会降低。您的 SQL-MS 是否添加任何代码?奇怪的...

于 2010-12-21T11:26:36.817 回答
1

根据MSDN,这样的交叉连接相当于内部连接。也许它使用交叉连接,因为交叉连接可用于创建笛卡尔积以及更简单的连接 - 而内部连接则受到更多限制。

于 2010-12-21T11:26:30.413 回答