将子字符串从一个表中的定界值匹配到第二个表中的记录,并建立联接

米科马克

最近,我将记录从旧的CRM中作为两个表转储到Navicat(MySQL)数据库中。

__________________
| table_1:       |
|----------------|
| id             |
| delimited_col  |
------------------

__________________
| table_2:       |
|----------------|
| id             |
| name           |
------------------

信息:

  • 表格1:
    • table_1.delimited_col由以“;”分隔的串联名称组成

      唱片前:“凯文;南希;詹姆斯;巴特;德莱尼”

  • 表2:
    • table_2.name由单个名称组成

      唱片的前身:“凯文”

我的目标:

  • 创建一个联接表(table_3),该表检查table_1.delimited_col中的每个记录,以查看它们是否包含来自table_2.name的值。
    • 如果table_1.delimited中的记录包含在table_2.name中找到的子字符串,则将来自table_1的ID的记录和来自table_2的ID的匹配记录添加到联接table_3。
__________________
| join_table:    |
|----------------|
| id             |
| table_1_id     |
| table_2_id     |
------------------

我一直在努力地解决这个问题,不胜感激!

专线小巴

您可以使用字符串方法find_in_set()

select t1.id table_1_id, t2.id table_2_id
from table_1 t1
inner join table_2 t2 on find_in_set(t2.name, replace(t1.delimited_col, ';', ','))

但是更好的是,您应该真正修复数据模型,并将每个值存储在分隔表的单独表行中。在关系数据库中存储csv数据不是一个好习惯,并且可能在很多方面伤害您。是一篇著名的SO帖子,其中详细介绍了该主题-实际上,与定界列表相关的许多问题都作为SO上此帖子的重复内容而被关闭。

如果要使用查询结果创建新表,则:

create table table_3(id int auto_increment, table_1_id, table_2_id);

insert into table_3 (table_1_id, table_2_id)
select t1.id, t2.id
from table_1 t1
inner join table_2 t2 on find_in_set(t2.name, replace(t1.delimited_col, ';', ','));

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MySQL左联接:从一个表中选择所有内容,但仅将第二个表中的值与条件匹配

来自分类Dev

MySQL左联接:从一个表中选择所有内容,但仅将第二个表中的值与条件匹配

来自分类Dev

如果它们恰好匹配第二个文件中的字符串,如何从一个文件中删除字符串?

来自分类Dev

如何从一个表中获取 SQL 值,其中共享值在第二个表中匹配?

来自分类Dev

MySQL从一个表中减去第二个表中的某些行的值

来自分类Dev

MySQL从一个表中减去第二个表中的某些行的值

来自分类Dev

如何将数据从一个表添加到第二个表中,但仅在匹配的行中添加

来自分类Dev

英孚 根据第二个表中记录的属性从一个表中选择记录,而第二个表中记录的属性为FK

来自分类Dev

从一个表中获取所有记录加上第二个表的相对最后一条记录

来自分类Dev

将一个数据帧中的值匹配到不同长度的第二个数据帧中的值

来自分类Dev

删除第一个数组中与第二个数组中的元素匹配的所有子字符串

来自分类Dev

内部联接两个表,并为第二个表的第一个表中的每个条目返回最大值

来自分类Dev

联接数据库表:在一个表中为第二个表中的每个组重复值

来自分类Dev

从一个表中获取所有列的值,并从第二个表中获取另一列的值

来自分类Dev

当第二个表引用第一个表中的主键时,如何将记录插入到两个表中?

来自分类Dev

当第二个表中的布尔值为TRUE时,用第一个表覆盖第二个表的结果

来自分类Dev

MySQL从一个表中选择记录,如果它们的ID和用户名没有出现在第二个表中

来自分类Dev

使用一个表中的数据过滤第二个表而不进行联接

来自分类Dev

将第二个CATEGORY表中的第一个表相加

来自分类Dev

从第二个和第三个表中获取与第一个表中的匹配值相对应的值

来自分类Dev

仅当第二个表中不存在记录时,才将记录从第一个表插入第二个表

来自分类Dev

查找表中的查找字符串值以填充第二个数据帧

来自分类Dev

匹配一个表中与第二个表子集中不匹配的项

来自分类Dev

根据第一个表中的列在第二个表中插入新记录

来自分类Dev

KDB选择一个表中在第二个表中具有匹配键的行

来自分类Dev

计算第二个表中与第一个表中的ID相匹配的条目

来自分类Dev

如果在第一个表中找不到值,则在第二个表上联接

来自分类Dev

如果在第一个表中找不到值,则在第二个表上联接

来自分类Dev

将一个mysql表中的一行连接到第二个表中的多行

Related 相关文章

  1. 1

    MySQL左联接:从一个表中选择所有内容,但仅将第二个表中的值与条件匹配

  2. 2

    MySQL左联接:从一个表中选择所有内容,但仅将第二个表中的值与条件匹配

  3. 3

    如果它们恰好匹配第二个文件中的字符串,如何从一个文件中删除字符串?

  4. 4

    如何从一个表中获取 SQL 值,其中共享值在第二个表中匹配?

  5. 5

    MySQL从一个表中减去第二个表中的某些行的值

  6. 6

    MySQL从一个表中减去第二个表中的某些行的值

  7. 7

    如何将数据从一个表添加到第二个表中,但仅在匹配的行中添加

  8. 8

    英孚 根据第二个表中记录的属性从一个表中选择记录,而第二个表中记录的属性为FK

  9. 9

    从一个表中获取所有记录加上第二个表的相对最后一条记录

  10. 10

    将一个数据帧中的值匹配到不同长度的第二个数据帧中的值

  11. 11

    删除第一个数组中与第二个数组中的元素匹配的所有子字符串

  12. 12

    内部联接两个表,并为第二个表的第一个表中的每个条目返回最大值

  13. 13

    联接数据库表:在一个表中为第二个表中的每个组重复值

  14. 14

    从一个表中获取所有列的值,并从第二个表中获取另一列的值

  15. 15

    当第二个表引用第一个表中的主键时,如何将记录插入到两个表中?

  16. 16

    当第二个表中的布尔值为TRUE时,用第一个表覆盖第二个表的结果

  17. 17

    MySQL从一个表中选择记录,如果它们的ID和用户名没有出现在第二个表中

  18. 18

    使用一个表中的数据过滤第二个表而不进行联接

  19. 19

    将第二个CATEGORY表中的第一个表相加

  20. 20

    从第二个和第三个表中获取与第一个表中的匹配值相对应的值

  21. 21

    仅当第二个表中不存在记录时,才将记录从第一个表插入第二个表

  22. 22

    查找表中的查找字符串值以填充第二个数据帧

  23. 23

    匹配一个表中与第二个表子集中不匹配的项

  24. 24

    根据第一个表中的列在第二个表中插入新记录

  25. 25

    KDB选择一个表中在第二个表中具有匹配键的行

  26. 26

    计算第二个表中与第一个表中的ID相匹配的条目

  27. 27

    如果在第一个表中找不到值,则在第二个表上联接

  28. 28

    如果在第一个表中找不到值,则在第二个表上联接

  29. 29

    将一个mysql表中的一行连接到第二个表中的多行

热门标签

归档