因此,我有一个表“A”,其中有一列12位的数值,现在有另一个表“B”,其中只有相同数值的前6位,我想使用表“A”的前6位和表“B”中已有的6位值连接这两个表。
SELECT * FROM A inner join B ON A.K1 = B.K1
这里K1基本上是我在输出中创建的新列的数字的前6位。我不能使用ALTER,因为它是一个活动表。
K1
ALTER
ar5n3qh51#
您可以只加入前6位数字,然后:示例数据:表test1:| 身份证|一些弦|| - ------|- ------|| 小行星123456|富|| 小行星234567|棒|| 小行星345678|巴兹|表test2:| 身份证|其他字符串|| - ------|- ------|| 小行星123456789012|伊涅|| 小行星234567890123|米涅|| 小行星9876|莫|该声明
test1
test2
SELECT * FROM test1 INNER JOIN test2 WHERE test1.id = LEFT(test2.id, 6)
将产生| 身份证|一些弦|身份证|其他字符串|| - ------|- ------|- ------|- ------|| 小行星123456|富|小行星123456789012|伊涅|| 小行星234567|棒|小行星234567890123|米涅|在this db<>fiddle中进行测试。
z2acfund2#
Select a.*, b.* from table_a a full outer join table_b b on to_number(substr(rtrim(ltrim(to_char(a.col_n))),1,6))=b.col_n;
你提供这么多信息,我能想到的就是这个,我不知道你们业务要求是内联接、左右外联接还是全外联接,联合是完全不同的概念:它只是将不同数据集中的相似列重新组合成一个数据集。还有简单的UNION,它使Oracle排序并消除重复项,以及UNION ALL,它获取所有数据,包括重复项(如果有的话)。
2条答案
按热度按时间ar5n3qh51#
您可以只加入前6位数字,然后:
示例数据:
表
test1
:| 身份证|一些弦|
| - ------|- ------|
| 小行星123456|富|
| 小行星234567|棒|
| 小行星345678|巴兹|
表
test2
:| 身份证|其他字符串|
| - ------|- ------|
| 小行星123456789012|伊涅|
| 小行星234567890123|米涅|
| 小行星9876|莫|
该声明
将产生
| 身份证|一些弦|身份证|其他字符串|
| - ------|- ------|- ------|- ------|
| 小行星123456|富|小行星123456789012|伊涅|
| 小行星234567|棒|小行星234567890123|米涅|
在this db<>fiddle中进行测试。
z2acfund2#
你提供这么多信息,我能想到的就是这个,我不知道你们业务要求是内联接、左右外联接还是全外联接,联合是完全不同的概念:它只是将不同数据集中的相似列重新组合成一个数据集。还有简单的UNION,它使Oracle排序并消除重复项,以及UNION ALL,它获取所有数据,包括重复项(如果有的话)。