2015-02-06 2 views
0

У меня есть база данных, которая была перенесена в новую схему. У старой базы данных нет ссылочной целостности, поэтому мне нужно избавиться от множества дубликатов.Поиск дубликатов строк и связанных записей

У меня есть таблица RegisteredVehicles:

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

и таблица ParkingRequests:

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

relatoinship является один ко многим - один зарегистрированный автомобиль для многих запросов.

Следующий запрос возвращает мне каждую повторяющуюся запись по 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 

Но у меня проблемы с запросом более сложным, чем это уже есть. Это заняло у меня довольно много времени, чтобы работать.

ответ

0

Пожалуйста, попробуйте этот запрос:

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 
Смежные вопросы