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.id = t2.t1_id および t2.col3='val3' である table1 t1、table2 t2 から t1 set col1 = 'val1' を更新します。

同じ結果がスローされますが、効率が低下する可能性があります。SQL-MS はコードを追加しますか? 変...

于 2010-12-21T11:26:36.817 に答える
1

MSDNによると、このようなクロス結合は内部結合と同等です。おそらく、クロス結合を使用してデカルト積や単純な結合を作成できるため、クロス結合を使用していますが、内部結合はより制限されています。

于 2010-12-21T11:26:30.413 に答える