SQL仅返回重复的行

use*_*432 42 sql

我有一个返回以下行的查询:

StateId,OrderId,OrderTime,PermitId

我需要只返回都全线号码完全相同的行,所以每个记录必须exctly一样的其他记录为它是一个副本.我想返回两个记录.这些reocrds与一堆没有重复的记录混合在一起......

任何的想法?

gbn*_*gbn 59

首先,确定重复项.其次,联接回提取这些行.

非聚合(或非窗口/排名)自联接形成部分交叉连接,并为任何一组键提供重复的平方.包括非重复.毕竟1 x 1 = 1.

SELECT
    t2.*
FROM
    (
    SELECT 
       StateId, OrderId, OrderTime, PermitId
    FROM
       myTable
    GROUP BY
       StateId, OrderId, OrderTime, PermitId
    HAVING
       COUNT(*) >= 2
    ) T1
    JOIN
    mytable T2 ON T1.StateId = T2.StateId AND T1.OrderId = T2.OrderId AND
                   T1.OrderTime = T2.OrderTime AND T1.PermitId = T2.PermitId
Run Code Online (Sandbox Code Playgroud)

  • 这是一个非常s (2认同)

Bro*_*sto 16

一般情况下,如果您只是想查看哪些行重复这些值...

SELECT StateId, OrderId, OrderTime, PermitId, COUNT(*) FROM Foo
GROUP BY StateId, OrderId, OrderTime, PermitId
HAVING COUNT(*) > 1
Run Code Online (Sandbox Code Playgroud)

  • OP 明确表示他/她需要结果集中的两个重复行。 (2认同)

Pab*_*ruz 8

数据库服务器支持子查询的一种可能性:

select * from your_table
 where (StateId, OrderId, OrderTime, PermitId) in
  ( select StateId, OrderId, OrderTime, PermitId
      from your_table
     group by StateId, OrderId, OrderTime, PermitId
    having count(1) > 1 )
Run Code Online (Sandbox Code Playgroud)