用于查找1列值与另一行上的另一列匹配的行的SQL查询

时间:2012-03-20 13:55:07

标签: sql sql-server tsql

我有一个名为'symbol'的数据库表,它通过非聚集索引是唯一的。 我们现在需要使用同一表中另一列的数据(例如column2)更改“符号”列中的数据。

尝试进行更新,例如

update table
set symbol = column2
where column2 <> '' and
deleted = 0

导致'无法在对象中插入重复键行'错误,因此表中必须存在1行或更多行,这些行在符号列中已经具有等于column2中的值的值,或者存在某些行具有重复的第2列值。

我可以在column2中找到具有重复项的行,但是我很难想出一个查询来查找在column2的任何行中存在的符号列中具有值的行。有人有任何想法吗?

感谢。

2 个答案:

答案 0 :(得分:1)

select t1.symbol, count(0) as rows
from table t1
join table t2 on t2.column2 = t1.symbol
group by t1.symbol

答案 1 :(得分:0)

测试数据:

symbol      column2
----------- -----------
1           1
2           1
3           3
4           5
  

找到那些在符号列中有值的行   第2列中的任何行。

select symbol, column2
from table 
where symbol in (select column2
                 from table)

结果:

symbol      column2
----------- -----------
1           1
3           3

或者可能这取决于你想要的结果。

select symbol, column2
from table as T1
where exists (select *
              from table as T2
              where T1.symbol = T2.column2 and
                    T1.symbol <> T2.symbol)

结果:

symbol      column2
----------- -----------
1           1