【问题标题】:Joining two tables with similar columns but different values连接具有相似列但值不同的两个表
【发布时间】:2020-03-31 03:14:19
【问题描述】:

首先,我以前见过这个问题: (Two tables with similar columns but different primary keys)

但与我的问题略有不同。

我的桌子看起来像这样:

Table 1
ID     Name    Salary
123    Mike    5000
129    David   4000
133    Linda   4500

Table 2
ID      Dept
0123    IT
0129    Tech Support
0133    Analytics

我想根据 ID 将这两个表连接起来,这样我就可以看到他们的 ID、Name 和 Dept。表 1 和表 2 中实际上是同一个人的,但是前面有一个 0表 2 中的 ID,因此程序将其视为唯一值,给我这样的结果:

Table result:
ID     Name    Dept
0123   null    IT
0129   null    Tech Support
0133   null    Analytics
123    Mike    null
129    David   null
133    Linda   null

有没有办法可以从表 2 中的 ID 中删除“0”或以某种方式加入它们?他们没有其他可以使用的类似列。应该是这样的:

Table result
ID     Name    Dept
123    Mike    IT
129    David   Tech Support
133    Linda   Analytics

谢谢,如果我的问题重复了,我找不到与我类似的问题。

【问题讨论】:

  • 这不是一个合理的场景

标签: mysql sql join key


【解决方案1】:

如果Table 2ID 的最后3 位数字是ID 值,可以在Table 1 中找到,那么您只需将Table 2.ID 值取模1000(去除任何前导数字)和JOIN

SELECT t1.ID, t1.Name, t2.Dept
FROM `Table 1` t1
JOIN `Table 2` t2 ON t2.ID % 1000 = t1.ID

输出:

ID      Name    Dept
123     Mike    IT
129     David   Tech Support
133     Linda   Analytics

Demo on dbfiddle

【讨论】:

  • 好的,谢谢。如果前面的数字不同怎么办?比如 123 = 60123 124 = 60124 133 = 60133 60是应该排除的前缀(是为了检查他们在哪个地区),但它实际上是指同一个人。谢谢
  • @Lutfi 他们总是 3 位数和 4 位数吗?还是在 Table 2 中总是多 1 位数?还是???
  • 其实前面的数字代表一个地区(60是另一个地区,61是另一个地区),所以真正的ID是最后3位。所以,60123 = 123, 60 是区域 A 对不起,如果我没有说清楚。
  • @Lutfi 没问题。查看我的编辑,应该可以满足您的需求
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-12
  • 1970-01-01
相关资源
最近更新 更多