Почему SQL Management Studio добавляет перекрестное соединение? - PullRequest
3 голосов
/ 21 декабря 2010

Мне иногда нужно запускать базовые обновления для объединения. Например:

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 думает, что я это имел в виду? Это должно иметь подлинное использование, иначе это не предложило бы это. Тем не менее, я понятия не имею, как и когда (и почему).

Ответы [ 2 ]

2 голосов
/ 21 декабря 2010

Должно быть, это ошибка, потому что ваш кулачный код правильный.

Попробуйте

Обновление t1 set col1 = 'val1' из таблицы 1 т1, таблицы 2 т2 где t1.id = t2.t1_id и t2.col3 = 'val3'

Выдает тот же результат, но он может быть менее эффективным. Ваш SQL-MS добавляет какой-либо код? Странно ...

1 голос
/ 21 декабря 2010

Согласно MSDN подобное перекрестное соединение эквивалентно внутреннему соединению.Возможно, он использует перекрестные объединения, потому что перекрестное соединение может использоваться для создания декартовых произведений, а также для более простых объединений, тогда как внутреннее соединение более ограничено.

...