0

私のテーブルでは、それぞれIDに1つしかないかどうかを知る必要がありID_nameます。どうすればそのようなクエリを書くことができますか?

私は試した:

select ID, count(distinct ID_name) as count_name 
from table 
group by ID 
having count_name > 1

しかし、実行するには永遠にかかります。

何かご意見は?

4

2 に答える 2

2
select  ID
from    YourTable
group by
        ID
having  count(distinct ID_name) > 1

また

select  *
from    YourTable yt1
where   exists
        (
        select  *
        from    YourTable yt2
        where   yt1.ID = yt2.ID
                and yt1.ID_Name <> yt2.ID_Name
        )

現在、ほとんどのID列は一意であると定義されprimary keyています。したがって、通常のデータベースでは、両方のクエリが空のセットを返すと予想されます。

于 2012-11-06T17:44:01.730 に答える
0

select tt.ID,max(tt.myRank) from ( select ip.ID,ip.ID_name, ROW_Number() over (partition by ip.ID,ip.ID_nameorder by ip.ID) as myRank from YourTable ip ) tt group by tt.ID

これにより、すべての ID と ID_Name の総数が得られます

複数の名前が関連付けられている ID のみが必要な場合は、where 句を追加するだけです。

select tt.ID,max(tt.myRank) from ( select ip.ID,ip.ID_name, ROW_NUMBER() over (partition by ip.ID,ip.ID_nameorder by ip.ID) as myRank from YourTable ip ) tt where tt .myRank > tt.ID による 1 グループ

于 2012-11-06T18:05:37.450 に答える