【问题标题】:MySQL - how to find similar data in two mysql tables?MySQL - 如何在两个 mysql 表中找到相似的数据?
【发布时间】:2020-11-23 13:59:36
【问题描述】:

我有两张这样的桌子:

表1

| cat   | id   | 
|-----  |------|
| 110** |  12  | 
| 110** |  18  |  
| 110** |  13  |
----------------

表2

| cat   | qty  | 
|-----  |------|
| 11012 |  2   | 
| 11017 |  8   |  
| 11016 |  1   |
----------------

结果

| cat   | 
|-----  |
| 11012 | 
---------

我可以组合 table1 中的 cat,id 列(如 11012)以在 table2 中的 cat 列(如 11012)中获得相同的值吗? 我试过这样的查询:

SELECT a.cat,a.id FROM table1 a JOIN table2 b ON a.cat LIKE CONCAT('%', b.cat, '%') 

但我没有得到预期的结果。

【问题讨论】:

  • 显示所需的输出/
  • 为什么你的猫桌里有那些**?看来整个表结构是完全错误的
  • @YourCommonSense 我只从我的客户公司那里得到它。也许对他们来说这是秘密。如果他们提供的数据是这样,我能说他们的表结构完全错误吗?

标签: mysql sql mariadb


【解决方案1】:
SELECT *
FROM table1 t1
JOIN table2 t2 ON CONCAT(TRIM(TRAILING '*' FROM t1.cat), id) = t2.cat

逻辑:从cat 中删除尾随星号,连接id,然后进行比较。

fiddle

【讨论】:

  • 我试过了,但是如何验证值呢?我只想显示 11012。您提供的查询 11018 和 11013 也会出现。其中如表2中没有11018和11013的值
  • @Mr.Coolhead 我不相信你。小提琴添加 - 看看。
  • 哦,对不起,我的错。我忘记修复我的 table2 数据。谢谢你的帮助!你拯救了我的一天!!!!
【解决方案2】:

如果我理解正确,你应该这样做

SELECT a.cat,a.id FROM table1 a JOIN table2 b ON LEFT(a.cat,3) = LEFT(b.cat, 3)

【讨论】:

  • 我已经修好了我的桌子。我想得到结果表中的结果。有没有办法连接 table1 中的 cat、id 列(将 '**' 替换为 id 列中的值)?
猜你喜欢
  • 2012-12-24
  • 2020-11-17
  • 1970-01-01
  • 1970-01-01
  • 2010-11-22
  • 1970-01-01
  • 2015-01-19
  • 1970-01-01
  • 2014-07-01
相关资源
最近更新 更多