【问题标题】:Mysql - Use a LIKE operator in Subqueries [duplicate]Mysql - 在子查询中使用 LIKE 运算符
【发布时间】:2020-11-01 22:29:03
【问题描述】:

谁能帮我解决这个问题?

我有一个表 A,其中有一列带有 id。 一行可以是空的,也可以有一个或多个 id。如果连续有多个 id,则以逗号分隔:

5f7c4738dcf5d
5f8571d05cffb,5f8574dc6a681,5f99d6d30b3ad
null
5f8ff7f6514ef,5f8fd1eac16a7

在表 B 中,我也有 id。但每行只有一个 id。

现在,如果表 A 中不存在相同的 id,我想选择表 B 中的所有行。

我试过这个查询:

SELECT * 
FROM B 
WHERE NOT EXISTS (SELECT ids FROM A WHERE A.ids LIKE '%B.id%')

如果我使用 = 运算符(而不是 LIKE),那么它可以工作,但不会选择逗号分隔值。

如何比较逗号分隔的值?

【问题讨论】:

  • 关注GMB答案的最后一行

标签: mysql sql string csv subquery


【解决方案1】:

您可以使用not existsfind_in_set()

select b.*
from b
where not exists (select 1 from a where find_in_set(a.ids, b.id))

也就是说,您的主要工作应该是修复您的数据模型。将 CSV 列表存储在关系数据库中是不好的做法,应该避免;相反,a(ids) 的每个元素都应该单独一行。推荐阅读:Is storing a delimited list in a database column really that bad?

【讨论】:

  • 谢谢,它有效。也感谢推荐,我不知道这个!我会用一个链接表来解决这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-26
相关资源
最近更新 更多