列结果略有不同时的 SQL (Oracle) 联接

Posted

技术标签:

【中文标题】列结果略有不同时的 SQL (Oracle) 联接【英文标题】:SQL (Oracle) Joins when column results are slightly different 【发布时间】:2014-01-10 16:03:44 【问题描述】:

我需要在一个相似的列上连接 2 个表,其中列之间的数据略有不同。一个例子:

表1

Key_ID
______

12345678
12345679
12345671
12345672

表2

Doc_Num
_______

Z12345678
Z12345679
Z12345671
Z12345672

这些是两个表之间唯一相关的列。我需要加入它们以便从表 2 的不同列中返回数据。例如,

SELECT DocTitle, DocDate
FROM Table2
RIGHT JOIN Table1
ON Table2.Doc_Num = Table1.Key_ID

所以我的主要问题是,当我尝试加入的每个数据点前面都有一个“Z”时,我如何加入这两个表?

请原谅我的无知...

【问题讨论】:

【参考方案1】:

类似:

select ...
from table1 t1
 right join table2 t2 on t1.key_id = to_number(substr(t2.doc_num,2));

【讨论】:

这样可以避免 Z 变成另一个字母时出现问题。【参考方案2】:
SELECT DocTitle, DocDate
FROM Table2
RIGHT JOIN Table1
ON Table2.Doc_Num = 'Z' || Table1.Key_ID

SELECT DocTitle, DocDate
FROM Table2
RIGHT JOIN Table1
ON substr(Table2.Doc_Num, 2) = Table1.Key_ID

两者都可以

【讨论】:

以上是关于列结果略有不同时的 SQL (Oracle) 联接的主要内容,如果未能解决你的问题,请参考以下文章

特定列上的SQL内部联接

Oracle 数据库列定义不明确/标识符无效

SQL Server 中的 Oracle 样式联接

MySQL执行计划分析

sql查询 表中一列不重复 显示多列

日期范围内的 Oracle sql 内部联接