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