Mysql - 在子查询中使用 LIKE 运算符
Mysql - Use a LIKE operator in Subqueries
谁能帮我解决这个问题?
我有 table A,其中有一列带有 id。
一行可以为空,也可以有一个或多个 ID。如果连续有多个 id,则它们以逗号分隔:
5f7c4738dcf5d
5f8571d05cffb,5f8574dc6a681,5f99d6d30b3ad
null
5f8ff7f6514ef,5f8fd1eac16a7
在 table B 我也有 id。但是每行只有一个 id。
如果 table A 中不存在相同的 ID,现在我想 select table B 中的所有行。
我试过这个查询:
SELECT *
FROM B
WHERE NOT EXISTS (SELECT ids FROM A WHERE A.ids LIKE '%B.id%')
如果我使用 = 运算符(而不是 LIKE),那么它可以工作,但逗号分隔值不是 selected。
如何比较逗号分隔值?
您可以使用 not exists
和 find_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?.
谁能帮我解决这个问题?
我有 table A,其中有一列带有 id。 一行可以为空,也可以有一个或多个 ID。如果连续有多个 id,则它们以逗号分隔:
5f7c4738dcf5d
5f8571d05cffb,5f8574dc6a681,5f99d6d30b3ad
null
5f8ff7f6514ef,5f8fd1eac16a7
在 table B 我也有 id。但是每行只有一个 id。
如果 table A 中不存在相同的 ID,现在我想 select table B 中的所有行。
我试过这个查询:
SELECT *
FROM B
WHERE NOT EXISTS (SELECT ids FROM A WHERE A.ids LIKE '%B.id%')
如果我使用 = 运算符(而不是 LIKE),那么它可以工作,但逗号分隔值不是 selected。
如何比较逗号分隔值?
您可以使用 not exists
和 find_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?.