【发布时间】:2014-01-12 02:25:49
【问题描述】:
我有两个不同的表,比如 oracle 中的表 A 和 B,每个表大约有 1500 万条记录。 Table A 具有列 (a,b,c,d) 和
Table B 有列 (e,f,g,h)。
目标是编写一个存储过程来检查表 A 中存在的每条记录是否也存在于表 B 中,反之亦然。应该将这两者之间的差异插入到第三个表中。
我的问题是
如果column e 包含某个字符串(0311),则Table A 中的column a 应与表B 中的e 列和f 列的连接进行比较,
如果不是,我必须将其与 column f 进行比较。
Column b 应该与table B 中的column g 和
我还必须将table A 中的column c 与table B 中的column g 进行比较,如果两者不匹配,则column d 应与column g 进行比较。
最快的方法是什么?
例如这两个是匹配的:
Table A: 9353456789,03117884657,12082200003035,12082123595535
Table B: 9353456789,0311,7884657,12082200003035
或:
Table A: 9353456789,03117884657,12082200003035,12082123595535
Table B: 9353456789,0311,7884657,12082123595535
不需要连接且匹配的记录示例:
Table A: 9353456789,03617884657,12082200003035,12082123595535
Table B: 9353456789,0361,03617884657,12082200003035
【问题讨论】:
-
一般来说,您可以使用以下查询找到
tableA中但不在tableB中的行(假设结构相同/相似):SELECT * FROM tableA MINUS SELECT * FROM tableB。对于您的问题,尽管我们需要更多详细信息 - 您能否发布一个 3-4TableA行和 3-4TableB行的示例,包括至少一个将强制通过连接值进行比较的行? -
是的,例如这两个是匹配的:表A:9353456789,03117884657,12082200003035,12082123595535 表B:9353456789,0311,7884657,12082200003035
-
抱歉,这还不够。您能否为每个场景至少包含一组行(连接与不连接),您是否还可以识别列
a、b、c、...g。另外,请指定e列必须包含的“特定字符串”。如果您编辑您的问题并添加示例而不是在评论中发布它们,那将是最好的。我敢肯定,只要定义得足够好,您的问题就可以得到解答。 -
我的猜测是用户自己会找到答案,如果他能够解释他的要求。请帮助我们,为您提供帮助!
标签: sql database oracle plsql large-data