使用'其中'

时间:2016-08-23 16:43:37

标签: sql sql-server

我有两个表:Table1和Table2

表1

id          name        value     source
----------- ----------- -----  ------------
1           a           4          10
2           b           5          10
3           c           6          11

表2

      set         text      
    ----------- ----------- 
      7           h                        
      8           g              

我想复制'值'表1中的表2的列where table1.source = 10

      set         text        value 
    ----------- ----------- ---------
      7           h              4        
      8           g              5 

我试过了:

 ALTER TABLE Table2 ADD value INT NOT NULL DEFAULT 0

            UPDATE tb2
            SET tb1.value = tb2.value
            from Table2 tb2
            JOIN Table1 tb1 
            ON tb1.source=10

它给了我这个:

    id          name        value    
  ----------- ----------- ---------
     7           h           4          
     8           g           4         

它只使用Table1中的第一个source值更新Table2行。

我做错了什么? 提前谢谢!

3 个答案:

答案 0 :(得分:0)

也许你可以试试这个:

insert into table2 (value) select (value) from table1 where table1.source = 10

只需添加新的"值" " table2"中的字段并尝试这种方法。

答案 1 :(得分:0)

如果您使用的是sQL服务器,请使用以下查询来更新table2。 请注意,该脚本特定于给定的样本数据。

ALTER TABLE Table2 
ADD value INT NOT NULL DEFAULT 0
GO

WITH cte_data
as
(SELECT ROW_NUMBER() OVER(ORDER BY [set])RNo,*
FROM Table2 )

UPDATE c
SET c.Value=t.Value
FROM cte_data c
JOIN    Table1 t on c.RNo=t.Id
WHERE t.Source=10

答案 2 :(得分:0)

您需要连接的行号。我建议把它放在两个表中:

WITH toupdate AS (
       SELECT tb1.*,
              ROW_NUMBER() OVER (PARTITION BY source ORDER BY id) as seqnum
       FROM table1 tb1
      )
UPDATE toupdate
     SET tb1.value = tb2.value
     FROM toupdate tb1 JOIN
          (SELECT tb2.*,
                  ROW_NUMBER() OVER (ORDER BY set) as seqnum
           FROM table2 tb2
          ) tb2
          ON tb2.seqnum = tb1.seqnum
     WHERE tb1.source = 10;