2017-05-26 54 views
1

假设我有两个数据集。 Two tables, one named marriage table showing the combination of two people in marriage, the second table showing details about people. The tables are joined via two foreign keys on PERSON_ID.如何最小化重复查询

在QlikView的,如果我尝试使用下面这样的查询,以包括这些在负载:

sql select marriage_id, primary_person_id, seconary_person_id, marriage_start_date, marriage_end_date from marriage_table; 

sql select person_id as primary_person_id, person_id as seconary_person_id, first_name, middle_name, last_name, date_of_birth from person_table; 

我会,我怎么可能导致自己有准确数据的错误,如QlikView有两个潜在的途径可以获得PERSON_TABLE。这是有道理的,但我真的很讨厌像下面这样重复选择和表格的想法。

sql select marriage_id, primary_person_id, seconary_person_id, marriage_start_date, marriage_end_date from marriage_table; 

sql select person_id as primary_person_id, first_name, middle_name, last_name, date_of_birth from person_table; 

sql select person_id as seconary_person_id, first_name, middle_name, last_name, date_of_birth from person_table; 

有没有更好的方法来处理这个我错过了?

+0

我对QlikView不熟悉,但查找“sql join”。查询人表不知道哪个人是现在的,因为它只是一个查询。当你只看人桌时,你不知道他们是否结婚,也无法知道。 –

+0

@KennyOstrom,就是这样 - Qlikview是根据列名处理连接的人。如果我只是在处理SQL,那将更容易! – Marisa

回答

0

你在这幅图中显示的内容被称为“循环引用”(我认为Qlikview称之为“合成密钥”),这是你应该尽量避免的,因为它可能会让你的应用程序不会崩溃,但显示不正确的结果(这是更糟糕的)。 在我看来,您有两种选择:

Op1 - 重复您的PERSON_TABLE,以便PRIMARY_PERSON_ID将链接到PERSON_TABLE_1,SECONDARY_PERSON_ID将链接到PERSON_TABLE_2。

PERSON_TABLE_1: 
SQL SELECT person_id as primary_person_id, 
first_name as first_name_1, 
middle_name as middle_name_1, 
last_name as last_name_1, 
date_of_birth as date_of_birth_1 
FROM person_table 

PERSON_TABLE_2: 
SQL SELECT person_id as secondary_person_id, 
first_name as first_name_2, 
middle_name as middle_name_2, 
last_name as last_name_2, 
date_of_birth as date_of_birth_2 
FROM person_table 

此选项的问题是,你必须选择每个字段,这通常不是很方便,这取决于你在你的应用程序做分析的类型,不同的别名。

Op2:创建一个独特的MARRIAGE_TABLE,已经包含了两个人的数据。对于您可以创建两个SQL查询连接(我将只使用名字和中间名的简单,但您可以添加其他所有领域)

SELECT T1.*, T2.first_name as first_name_1, T2.middle_name as middle_name_1, 
T3.first_name as first_name_2, T3.middle_name as middle_name_2 
FROM MARRIAGE_TABLE AS T1 
LEFT JOIN PERSON_TABLE AS T2 ON Q1.primary_person_id = T2.person_id 
LEFT JOIN PERSON_TABLE AS T3 ON Q1.secondary_person_id = T3.person_id 

,这将导致与下列的独特表:

MARRIAGE_ID PRIMARY_PERSON_ID SECONDARY_PERSON_ID MARRIAGE_START_DATE MARRIAGE_END_DATE FIRST_NAME_1 MIDDLE_NAME_1 FIRST_NAME_2 MIDDLE_NAME_2