SQL SERVER仅当(CountRows(table1.ColumnB = table2.ColumnB)== 1)更新table1中的columnA时才使用table2的columnA

时间:2014-03-13 21:12:26

标签: sql-server count

假设有两个表,表1和表2。 每个表都有两列,ColumnA和ColumnB。 我想用table2.ColumnB更新table1.ColumnA table1.ColumnB和table2.ColumnB是相同的。 但是,table2中可能有多行,其中table1.ColumnB和table2.ColumnB是相同的。如果是这种情况,我不想更新列。我想更新列只有1个情况,其中table1.ColumnB和table2.ColumnB是相同的

代码适用于SQL SERVER。我尝试了以下但有语法错误,我无法理解。

SET [ColumnA] = 

(

IF ((SELECT COUNT(*) FROM Table2 WHERE ColumnB = Table1.ColumnB) = 1)

BEGIN

SELECT [ColumnA]

FROM Table2

WHERE Table1.ColumnB = ColumnB

END

)

WHERE [ColumnA] IS NULL;

2 个答案:

答案 0 :(得分:0)

我认为你可以设置2个不同的变量 (SET ColumnA = select count(*)blabla..as you does;然后对ColumnB执行相同操作) 然后你可以比较这两个值(IF ColumnA == ColumnB)

答案 1 :(得分:0)

UPDATE
  Table1
SET
  ColumnA = Table2.ColumnA
FROM
(
  SELECT MAX(ColumnA) AS ColumnA, ColumnB 
    FROM Table2
GROUP BY ColumnB
  HAVING COUNT(*) = 1
)
  AS Table2
WHERE
      Table1.ColumnB  = Table2.ColumnB
  AND Table1.ColumnA IS NULL