我正在尝试执行查询时遇到问题。我正在尝试选择结果集中的值。
我目前正在处理两个问题:
A)
SELECT /*+ RULE */ pi.compressed_name, pi.phn, to_char(pi.date_of_birth , 'YYYY/MM/DD') as date_of_birth, gen.description as gender , to_char(pe.started_on , 'YYYY/MM/DD' ) as medicare_eligibility_start , to_char(pe.ended_on , 'YYYY/MM/DD' ) as medicare_eligibility_end FROM medcrtr.forest_node fnpppp, medcrtr.forest_node fnppp, medcrtr.forest_node fnpp, medcrtr.forest_node fnp, medcrtr.forest_node fn, medcrtr.group_member gm, medcrtr.group_type gt, medcrtr.program_eligibility pe, person_index pi, gender_type gen WHERE gm.entity_type_id = 1 --:P_PERSON_ENTITY_TYPE_ID AND gen.id = pi.gender_code AND gt.id = gm.group_id AND gt.category_id = 1 --icgroupmemebrcategory :P_GROUP_CATEGORY_ID AND fn.source_id = group_id AND fn.entity_type_id = 3 --icGOM:P_ENTITY_TYPE_ID AND fnp.id = fn.parent_id AND fnpp.id = fnp.parent_id AND fnppp.id = fnpp.parent_id AND fnpppp.id = fnppp.parent_id AND pe.person_id = gm.source_id AND pe.sub_program_id = fnpp.parent_id AND pi.person_id = gm.source_id AND fnppp.id = 1169 AND (gm.ended_on >= SYSDATE OR gm.ended_on IS NULL)
B)与第二行最后一行相同,其中
AND fnppp.id = 1715
所以现在第一个查询返回1536条记录,第二条查询返回2067条。然而,两个查询中都有记录(人)。我想做的就是把它们单独出来。 (基本上我想做一个交集,所以我会研究那个)
到目前为止,我已尝试执行以下操作:
- 我在查询A中添加了以下内容:
AND pi.person_id NOT IN (SELECT /*+ RULE */ pi.person_id FROM ... )括号内的查询是查询B(第一行除外)。这将返回大约10行(我不确定这是否准确)。
- 然后我使用NOT IN
运行相同的查询。这给了我大约200的结果(不确定这是否准确)。
现在这两个数字显然不合计1536,我认为应该发生?显然,其中一个或两个都是错误的。
谁能说出我做错了什么?谢谢你的帮助。
答案 0 :(得分:1)
如果您真的在寻找两个结果集之间匹配的记录,请查看有关SQL INTERSECT命令的信息。
但是,查看您的查询,我不确定这是您想要的。如果一条记录有fnppp.id = 1169
,那么同一条记录如何有fnppp.id = 1715
?
您是否正在寻找更像SQL UNION的内容?