mysql 如何在不使用join或union的情况下连接两个不同的表?

thtygnil  于 2023-03-07  发布在  Mysql
关注(0)|答案(2)|浏览(224)

因此,我有一个表“A”,其中有一列12位的数值,现在有另一个表“B”,其中只有相同数值的前6位,我想使用表“A”的前6位和表“B”中已有的6位值连接这两个表。

SELECT *    
FROM A 
inner join B ON A.K1 = B.K1

这里K1基本上是我在输出中创建的新列的数字的前6位。
我不能使用ALTER,因为它是一个活动表。

ar5n3qh5

ar5n3qh51#

您可以只加入前6位数字,然后:
示例数据:
test1
| 身份证|一些弦|
| - ------|- ------|
| 小行星123456|富|
| 小行星234567|棒|
| 小行星345678|巴兹|
test2
| 身份证|其他字符串|
| - ------|- ------|
| 小行星123456789012|伊涅|
| 小行星234567890123|米涅|
| 小行星9876|莫|
该声明

SELECT * FROM test1
INNER JOIN test2
WHERE test1.id = LEFT(test2.id, 6)

将产生
| 身份证|一些弦|身份证|其他字符串|
| - ------|- ------|- ------|- ------|
| 小行星123456|富|小行星123456789012|伊涅|
| 小行星234567|棒|小行星234567890123|米涅|
this db<>fiddle中进行测试。

z2acfund

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,它获取所有数据,包括重复项(如果有的话)。

相关问题