查找重复行和相关记录
Finding duplicate rows and related records
我有一个迁移到新模式的数据库。旧数据库没有引用完整性,因此我需要删除大量重复项。
我有一个 table 的 RegisteredVehicles
:
id | plate | state
# | 1425 | il
# | 3322 | il
和 table 的 ParkingRequests
:
id | date | registeredVehicleId (FK)
# | 2/2/12 | #
这种关系是一对多的 - 一个注册车辆对应多个请求。
以下查询通过 Plate
和 State
获取每个重复记录,并输出每个 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
我有一个迁移到新模式的数据库。旧数据库没有引用完整性,因此我需要删除大量重复项。
我有一个 table 的 RegisteredVehicles
:
id | plate | state
# | 1425 | il
# | 3322 | il
和 table 的 ParkingRequests
:
id | date | registeredVehicleId (FK)
# | 2/2/12 | #
这种关系是一对多的 - 一个注册车辆对应多个请求。
以下查询通过 Plate
和 State
获取每个重复记录,并输出每个 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