Утверждение «Каждый заявитель может иметь одну или несколько форм» не следует из вашей схемы - сущность Form
связана с сущностью Application
, но не с сущностью Applicant
.
Было бы хорошо иметь образцы данных, на которые вы получаете дубликаты.
WITH
APPLICATION (Serial) as (values
(1)
)
, FORM (Serial, Application_serial) as (values
('001', 1)
--, ('002', 1)
)
, APPLICANT (Serial, Application_Serial, First_Name, Last_Name) as (values
(1, 1, 'John', 'Doe')
, (2, 1, 'Jane', 'Doe')
)
, ADDRESS (Serial, Applicant_Serial, Street, City, State, Postal_code) as (values
(1, 1, '123 Main Street', 'Magical City', 'ZZ', '00000')
, (2, 2, '456 Y Street', 'Another City', 'ZZ', '00000')
)
SELECT
APPLICANT.FIRST_NAME, APPLICANT.LAST_NAME
, ADDRESS.STREET, ADDRESS.CITY, ADDRESS.STATE, ADDRESS.POSTAL_CODE
, FORM.SERIAL AS FORM_SERIAL
FROM APPLICATION
JOIN FORM ON FORM.APPLICATION_SERIAL = APPLICATION.SERIAL
JOIN APPLICANT ON FORM.APPLICATION_SERIAL = APPLICANT.APPLICATION_SERIAL
JOIN ADDRESS ON APPLICANT.SERIAL = ADDRESS.APPLICANT_SERIAL;
FIRST_NAME LAST_NAME STREET CITY STATE POSTAL_CODE FORM_SERIAL
---------- --------- --------------- ------------ ----- ----------- -----------
John Doe 123 Main Street Magical City ZZ 00000 001
Jane Doe 456 Y Street Another City ZZ 00000 001
2 record(s) selected.
Мой пример не возвращает дубликаты.
Но вы получите свои результаты, если раскомментируете 2-й Form
этого Application
(не Applicant
). Именно эта 2-я Form
запись является причиной, по которой вы получаете дубликаты на выходе.
Вы должны решить, что возвращать в столбце FORM_SERIAL
в случае кратного Forms
для данного Application
.