所以我有一个表“A”,其中包含 12 位数值的列,现在还有另一个表“B”,它只有相同数值的前 6 位数字,我想使用前 6 位连接两个表表“A”的数字和表“B”中已有 6 位值。
SELECT *
FROM A
inner join B ON A.K1 = B.K1
here
K1
基本上是我在输出中创建为新列的数字的前 6 位数字。
我不能使用
ALTER
,因为它是一个实时表。
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;
这就是我能想到的,因为您提供了尽可能多的信息。不知道你的业务要求是inner join,left/right outer join还是full outer join。 Union 是一个完全不同的概念:它只是将来自不同数据集的类似列重新组合成一个数据集。并且有一个简单的 UNION 使 Oracle 可以排序和消除重复项和 UNION ALL,它获取所有数据,包括重复项(如果有的话)。
您可以只加入前 6 位数字:
示例数据:
桌子
test1
:
id | 一些字符串 |
---|---|
123456 | 福 |
234567 | 酒吧 |
345678 | 巴兹 |
桌子
test2
:
id | 其他字符串 |
---|---|
123456789012 | eenie |
234567890123 | 米妮 |
987654321098 | 莫 |
声明
SELECT * FROM test1
INNER JOIN test2
WHERE test1.id = LEFT(test2.id, 6)
会产生
id | 一些字符串 | id | 其他字符串 |
---|---|---|---|
123456 | 福 | 123456789012 | eenie |
234567 | 酒吧 | 234567890123 | 米妮 |