Sql DB2多表联接产生重复的行

Sql DB2多表联接产生重复的行,sql,join,db2,distinct,Sql,Join,Db2,Distinct,我很难将多个表连接在一起;这样做时,我会得到我不期望的重复数据 本质上,每个应用程序都可以有一个或多个表单。每个申请人可以有一个或多个表格。一个申请人可以有一个或多个地址;然而,为了简单起见,我只想返回一个地址 SELECT APPLICANT.FIRST_NAME, APPLICANT.LAST_NAME, ADDRESS.STREET, ADDRESS.CITY, ADDRESS.STATE, ADDRESS.POSTAL_CODE,

我很难将多个表连接在一起;这样做时,我会得到我不期望的重复数据

本质上,每个应用程序都可以有一个或多个表单。每个申请人可以有一个或多个表格。一个申请人可以有一个或多个地址;然而,为了简单起见,我只想返回一个地址

SELECT
    APPLICANT.FIRST_NAME,
    APPLICANT.LAST_NAME,
    ADDRESS.STREET,
    ADDRESS.CITY,
    ADDRESS.STATE,
    ADDRESS.POSTAL_CODE,
    FORM.SERIAL
FROM
    APPLICATION JOIN
    FORM ON
        FORM.APPLICATION_SERIAL = APPLICATION.SERIAL JOIN
    APPLICANT ON
        FORM.APPLICATION_SERIAL = APPLICANT.APPLICATION_SERIAL JOIN
    APPLICANT_ADDRESS ON
        APPLICANT.SERIAL = APPLICANT_ADDRESS.APPLICANT_SERIAL
运行此查询时,如果一个应用程序有两个申请者,每个申请者都有自己的地址,每个申请者都有一个表单,则每个申请者的结果将重复两次。我尝试过选择
不同的
列,以及按序列号、姓氏、名字等进行分组,但没有效果

+------------+-----------+-----------------+--------------+-------+-------------+-------------+
| First_Name | Last_Name |     Street      |     City     | State | Postal_code | Form_Serial |
+------------+-----------+-----------------+--------------+-------+-------------+-------------+
| John       | Doe       | 123 Main Street | Magical City | ZZ    |       00000 |         001 |
| John       | Doe       | 123 Main Street | Magical City | ZZ    |       00000 |         001 |
| Jane       | Doe       | 456 Y Street    | Another City | ZZ    |       00000 |         002 |
| Jane       | Doe       | 456 Y Street    | Another City | ZZ    |       00000 |         002 |
+------------+-----------+-----------------+--------------+-------+-------------+-------------+
将这些表连接在一起时,防止重复行的最佳方法是什么?

模式中没有“每个申请者可以有一个或多个表单”的语句-表单与申请者实体相关,但与申请者实体无关。 这将是很好的样本数据,你得到重复的

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.
我的示例不返回重复项。 但是,如果您取消对该
申请
(非
申请人
)的第二张
表格
的注释,您将获得结果。也就是说,第二个
表单
记录是您在输出中获得重复项的原因。
如果给定的
申请有多张
表格
申请者
申请者
之间缺少连接条件,您应该在
表格
列中决定返回什么。因此,如果我申请两次,是否意味着我有两个
申请者
记录?如果地址在
表单上
,这难道不意味着地址属于表单吗?(即使我作为申请人也有地址)