我在实现以下目标时遇到问题:
- 我有一个只包含字符串的“参考表”
- 我有一个“数据表”,它确实有一个包含一个字符串的字段,该字符串由参考表中可能出现的几个字符串连接而成。分隔字符串的语法各不相同 - 因此它们不能轻易拆分。
我需要的是一个贯穿引用表的查询,并搜索数据表中是否包含此连接字符串包含引用表中的值的行。
此外,如果查询将返回数据行的 PK 以及从参考表中找到的字符串,那将是完美的。
试试这个查询。如果它包含来自 reference_table 的多个字符串,它可以从 data_tables 输出重复项:
select * from data_table
join reference_table
on (data_table.concatenated_field
like CONCAT('%',reference_table.string_field,'%'));
您还可以将 data_tables 中的这些重复行组合为一个:
select data_table.id, max(data_table.concatenated_field),
GROUP_CONCAT(reference_table.string_field)
from data_table
join reference_table
on (data_table.concatenated_field
like CONCAT('%',reference_table.string_field,'%'))
group by data_table.id