以下查询:
select
cu.course_id as 'bb_course_id',
cu.user_id as 'bb_user_id',
cu.role as 'bb_role',
cu.available_ind as 'bb_available_ind',
CASE cu.row_status WHEN 0 THEN 'ENABLED' ELSE 'DISABLED' END AS 'bb_row_status',
eff.course_id as 'registrar_course_id',
eff.user_id as 'registrar_user_id',
eff.role as 'registrar_role',
eff.available_ind as 'registrar_available_ind',
CASE eff.row_status WHEN 'DISABLE' THEN 'DISABLED' END as 'registrar_row_status'
into enrollments_comparison_temp
from narrowed_users_enrollments cu
full outer join enrollments_feed_file eff on cu.course_id = eff.course_id
快速背景:我从复制表中获取数据,并根据某些条件将其选择为narrowed_users_enrollments
。在脚本中,我使用文本供稿文件,使用注册数据,并将其插入enrollments_feed_file
。目的是将最新的注册数据与数据库中已有的注册进行比较。
然而,问题是加入这些表会产生大约160,000行,而我实际上只期望大约22,000行。进行此比较的重点是,我可以在连接的任一侧查找无效值。例如,如果右侧的表包含null,则禁用注册记录。如果左侧的表格包含空值,则添加此学生的注册。
我知道它有点不对,因为我没有使用PK或FK。这是在表中选择的内容:
此处的屏幕截图显示了左侧注册表中的select *和右侧的Feed文件。
http://i.imgur.com/0ZPZ9HS.png
这是一个屏幕截图,显示了全外连接中新创建的表格。
http://i.imgur.com/89ssAkS.png
正如您所看到的那样,即使只有一个匹配的注册(匹配的jmartinez12列),在左侧为相同的记录创建了4个额外的行,用于右侧的注册。我想要获得的是5行,第一行是屏幕截图中的情况(匹配预先存在的注册和在feed文件中注册),但是,接下来的4行是{ {1}}列应为NULL bb_*
。
我在这里忽略了一些简单的事情吗?我尝试了一个select distinct,并且我添加了一个where子句,指定course_ids何时相等但是确保我不会获得我需要的空行。我也加入了user_id上的表格,但结果仍然相同。
答案 0 :(得分:0)
一个快速建议是添加DISTNCT
子句。如果您设置的记录是完整的重复项,可能会将其降低到您期望的范围。
答案 1 :(得分:0)
修复还要加入:
ON cu.course_id = eff.course_id AND cu.user_id = eff.user_id