查找重复行和相关记录

Finding duplicate rows and related records

我有一个迁移到新模式的数据库。旧数据库没有引用完整性,因此我需要删除大量重复项。

我有一个 table 的 RegisteredVehicles:

id | plate | state 
#  | 1425  | il
#  | 3322  | il

和 table 的 ParkingRequests:

id | date   | registeredVehicleId (FK)
#  | 2/2/12 | #  

这种关系是一对多的 - 一个注册车辆对应多个请求。

以下查询通过 PlateState 获取每个重复记录,并输出每个 RegisteredVehicle's ID。

select Id, Plate, [State] from RegisteredVehicles where Plate in (
select plate from RegisteredVehicles group by Plate having count(*) > 1
)

这给了我这样的东西

Id                                      Plate   State
036d59f1-d928-40f2-b373-049122202bff    0000000 IL
615e2fab-8b43-4e42-b6f0-268038bba949    0000000   

我正在尝试获取上述代码块中返回的每个车辆行的停车请求计数。像这样

Id | Plate | State | # Requests
1  | 222   | IL    | 2
2  | 333   | IL    | 4  

但是我遇到了使查询比现在更复杂的问题。这本身花了我很长时间才开始工作。

请尝试这个查询:

SELECT
    A.ID,
    A.PLATE,
    A.STATE AS [STATE],
    COUNT(A.ID) AS [NO OF REQUESTS]
FROM REGISTEREDVEHICLES A
LEFT JOIN PARKINGREQUESTS B
    ON B.REGISTEREDVEHICLEID = A.ID
WHERE
    A.PLATE IN(
                    SELECT 
                        PLATE 
                    FROM REGISTEREDVEHICLES 
                    GROUP BY PLATE
                    HAVING COUNT(*) > 1
    )
    GROUP BY     
    A.ID,
    A.PLATE,
    A.STATE