2015-05-19 3 views
0

У меня есть 1 стол с 500 строками и другой стол с 750 рядами или около того. Я делаю это, я получаю случайные 500 строк определенного столбца из второй таблицы, и я хочу обновить недавно добавленный столбец в первой таблице с этими 500 значениями.столбец обновления всех строк таблицы

Я знаю, как делать обновления, которые выглядят следующим образом:

UPDATE schema.table1 
SET column = cl.column FROM schema.table1 cl 
INNER JOIN table2 cf ON cf.column = cl.column 

, но у меня нет каких-либо столбцы, соответствующие в обеих таблицах. Есть ли способ сделать это без необходимости сопоставления столбцов на внутреннем соединении?

так в основном, я хочу, чтобы обновить 500 строк 1 столбца в одной таблице, с 500 значений из другой таблицы

+0

Является ли этот MySql или SQL Server? Ответ будет зависеть от того, какой из них вы используете. –

+0

@MauriceReeves sql server studio studio –

+0

Итак, у вас нет соответствующего столбца, но вы хотите использовать внутреннее соединение. Расскажите нам, почему вы хотите обновить без логики? – Imran

ответ

1

Вы можете сделать это с помощью ROW_NUMBER для создания столбца, чтобы объединить две таблицы. взгляните на пример и вывод

DECLARE @T1 TABLE (column1 INT ,column2 VARCHAR(2)) 

DECLARE @T2 TABLE (column1 VARCHAR(2)) 

INSERT INTO @T1 (column1, column2) 
     VALUES (0, 'A'), (1, 'B'), (2, 'C') 

INSERT INTO @T2 (column1) 
    VALUES ('D'),('F'),('G') 


SELECT *, ROW_NUMBER() OVER (PARTITION BY 1 ORDER BY (SELECT NULL)) AS RN FROM @T1 
SELECT *, ROW_NUMBER() OVER (PARTITION BY 1 ORDER BY (SELECT NULL)) AS RN FROM @T2 

;WITH CTE_1 AS (SELECT *, ROW_NUMBER() OVER (PARTITION BY 1 ORDER BY (SELECT NULL)) AS RN FROM @T1) 
    ,cte_2 AS (SELECT *, ROW_NUMBER() OVER (PARTITION BY 1 ORDER BY (SELECT NULL)) AS RN FROM @T2) 
UPDATE t1 
SET t1.column2 = t2.column1 
FROM CTE_1 t1 
JOIN cte_2 t2 
ON t1.rn = t2.rn 

SELECT *, ROW_NUMBER() OVER (PARTITION BY 1 ORDER BY (SELECT NULL)) AS RN FROM @T1 
SELECT *, ROW_NUMBER() OVER (PARTITION BY 1 ORDER BY (SELECT NULL)) AS RN FROM @T2 
Смежные вопросы