2012-03-20 12 views
2

私は、クラスタ化されていないインデックスを介して一意の 'symbol'という列のデータベーステーブルを持っています。 ここで、同じテーブルの別の列、たとえばcolumn2のデータを使用して、 'symbol'列のデータを変更する必要があります。1つの列の値が別の行の別の列と一致する行を検索するSQLクエリ

更新を実行しようとしています。エラー「オブジェクトに重複するキー行を挿入できません」ので、既にCOLUMN2の値に等しいシンボル列の値を持っているテーブルに存在する1つの以上の行が存在しなければならないで

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

結果、または列2の値が重複している行があります。

私はcolumn2に重複している行を見つけることができますが、私は列2の任意の行に存在するシンボル列の値を持つ行を見つけるためのクエリを思いつくのに苦労しています。誰にでもアイデアはありますか?

ありがとうございました。

答えて

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

試験データ:

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

は COLUMN2内の任意の行に存在するシンボル列の値を持っているそれらの行を見つけます。

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