Таблица обновления T-SQL из выбранного потока - PullRequest
1 голос
/ 27 сентября 2019

Мне было интересно, как sql выполняется при обновлении из оператора select, когда нет выражения where.

Пример:

Таблица 1

+---------+-----------+
| Column1 |   Column2 |
+---------+-----------+
|    3097 |   Empty   |
|    3097 |   Empty   |
+---------+-----------+

Таблица 2

+---------+--------------------+
| Column1 |       Column2      |
+---------+--------------------+
|    3097 |   Camberwell       |
|    3097 |   Camberwell North |
+---------+--------------------+
Update a
Set a.column2 = b.column2
From Table1 a 
Inner join Table2 b On a.Column1=b.Column1

Значит ли это, что он обновит Column2 из a с Camberwell North для всех строк?

Ответы [ 3 ]

1 голос
/ 27 сентября 2019

После редактирования: -

WITH X AS 
(
SELECT * FROM
(
    SELECT ROW_NUMBER() over (order by Column1) As myRowNumber1,Column2 AS Column2tbl1 FROM Table1
)a1
INNER JOIN
(
    SELECT ROW_NUMBER() over (order by Column1) As myRowNumber2,Column2 AS Column2tbl2  FROM Table2
)b1
ON a1.myRowNumber1=b1.myRowNumber2
)
UPDATE X
set Column2tbl1=Column2tbl2

Это может быть возможно с помощью ROWNUMBER () .......

Здесь я выполняю ROWNUMBER () в обеих таблицах, затем обновляемзатем Table1

мы можем получить ...... как строка 1 таблицы 1 совпадает с строкой 1 таблицы 2. Обновление до Camberwell.Затем строка 1 таблицы 1 соответствует строке 2 таблицы 2.

Вывод: - enter image description here

1 голос
/ 27 сентября 2019

Ответить на ваш вопрос, и это может быть интересный ответ.Я смог проверить это и определил, что большинство стандартных объединений ( Внутренний, Левый, Полный наружный ) дали ответ «Первая» строка и проигнорировали Второй ряд

enter image description here

Но, Право Соединение сделал по одному:

enter image description here

0 голосов
/ 27 сентября 2019

Я только что попробовал это и был удивлен, что не получил ошибку.Вместо этого, как вы предполагали, Table1.Column2 было обновлено с результатами первой строки из Table2.

   CREATE TABLE #test1 (Col1 int, Col2 varchar(10))
   CREATE TABLE #test2 (Col1 int, Col2 varchar(10))
   INSERT INTO #test1 (col1) Values (3097), (3097)
   INSERT INTO #test2 (Col1, Col2) Values (3097, 'C1'), (3097, 'C2')

    UPDATE #test1 SET Col2 = #test2.Col2 
    FROM #test1 INNER JOIN #test2 ON #test1.Col1=#test2.Col1

Результаты:

    SELECT * FROM #test1
Col1    Col2
3097    C1
3097    C1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...