0

相互に比較する必要がある SQL クエリからの結果セットがあります。

例:

ID |  VALUE  |  Comment | sort | store | price
 1    test       main      des    f1       5
 2    each       sec       asc    f2       10
 3    test       main      des    f1       12

その結果セットから、値、コメント、並べ替え、保存が同じ行のみを取得する必要があります。

お気に入り:

 ID |  VALUE  |  Comment | sort | store | price
  1    test       main      des     f1      5
  3    test       main      des     f1      12

だから私は変更する必要があります

select id, value, comment, sort, store, price from test.table 

そのマッチングを行います。

どうすればそれができるかについてのアイデアはありますか?

前もって感謝します。

バガボンド

4

2 に答える 2

2

ほとんどの SQL データベースはウィンドウ関数をサポートしています。これは次のように実行できます。

select id, value, comment, sort, store, price
from (select t.*,
             count(*) over (partition by value, comment, sort, store) as cnt
      from t
     ) t
where cnt > 1;
于 2013-08-19T14:21:15.473 に答える
1

データベースがウィンドウ関数をサポートしていない場合は、次のクエリを試すことができます。

select
    *
from
    (
        select
            value, comment, sort, store
        from
            test
        group by
            value, comment, sort, store
        having count(*) > 1
    ) as t
    inner join test on (
        test.value = t.value and test.sort = t.sort and test.сomment = t.сomment and test.store = t.store
    )

しかし、「相互」比較のための別の出力をお勧めします。

select
    t1.id, t2.id, t1.VALUE, t1.sort, t1.store, t1.price, t2.price
from
    test t1
    join test t2 on (t2.id > t1.id and t1.value = t2.value and t1.sort = t2.sort and t1.store = t2.store and t1.comment = t2.comment)
于 2013-08-19T15:43:51.503 に答える