查询在oracle中获取交集?

时间:2012-01-12 10:04:30

标签: oracle

我有2个表格 - routloc

表格Rout列:

Id (PK)
file_key
rout_no
....

此表有800k记录

表格列

catalog_no(PK)
country_id    
...

此表有700k记录。所以我想要这样的东西(两张桌子之间的交点)

SELECT rout.file_key,rout.rout_no,loc.country_id  
FROM ROUT_TBL rout, LOC_TBL loc 
WHERE rout.file_key != loc.catalog_no 
你能告诉我怎么样?

1 个答案:

答案 0 :(得分:3)

我不确定我理解你在问什么。 “交集”是一个数学术语,表示您要确定两个表中存在哪些值。但是您发布的查询似乎正在查找完全相反的情况 - 一个表中的行集在另一个表中不存在。

如果你真的是指交叉点

SELECT rout.file_key,
       rout.rout_no,
       loc.country_id
  FROM rout_tbl rout 
       JOIN loc_tbl loc ON (rout.file_key = loc.catalog_no)

如果您希望ROUTLOC

中不存在SELECT rout.file_key, rout.rout_no FROM rout_tbl rout WHERE NOT EXISTS( SELECT 1 FROM loc_tbl loc WHERE loc.catalog_no = rout.file_key ) 中的所有行
ROUT

如果您希望来自LOC的数据以及来自SELECT rout.file_key, rout.rout_no, loc.country_id FROM rout_tbl rout LEFT OUTER JOIN loc_tbl loc ON (rout.file_key = loc.catalog_no) 的数据(如果存在)

{{1}}