【问题标题】:MySQL Select, where field is not in a CSV list in another field [duplicate]MySQL Select,其中字段不在另一个字段的 CSV 列表中[重复]
【发布时间】:2019-01-16 07:17:53
【问题描述】:

我有一张这样的桌子

fieldA  | fieldB
-----------------
a       | a,b,c
-----------------
b       | a,c
-----------------
c       | x,y,z

其中 fieldA 是一个字符串,fieldB 是一个 CSV 列表。

我需要构建一个查询,该查询的功能类似于我希望从该查询中获得的结果:

SELECT * FROM table WHERE fieldA NOT IN fieldB

(如果 fieldA 不在 fieldB 的 CSV 列表中,则选择)

或者一个劣质但可用的查询可能是这样的:

SELECT * FROM table WHERE fieldA NOT LIKE %fieldB%

(如果 fieldA 不是 fieldB 的子字符串,则选择)

结果会是这样的:

fieldA  | fieldB
-----------------
b       | a,c
-----------------
c       | x,y,z

【问题讨论】:

  • @hbgoddard "您的 SQL 语法有错误;请查看与您的 MariaDB 服务器版本相对应的手册,了解在 'fieldB 附近使用的正确语法" 和 "您的 SQL 语法有错误; 检查与您的 MariaDB 服务器版本相对应的手册,以分别在“%fieldB%”附近使用正确的语法。我知道如果我有一个特定的数组或字符串(分别),这应该可以工作,但是由于某种原因,在将一个字段与另一个字段进行比较时这不起作用

标签: mysql csv


【解决方案1】:
SELECT * FROM table WHERE  NOT FIND_IN_SET(fieldA,fieldB)

你正在mysql中寻找FIND_IN_SET

注意:已知 FIND_IN_SET 表现不佳。在生产环境中使用之前请三思

【讨论】:

  • 太好了,完美运行:) 当我没有找到答案时,我最终在 PHP 中执行此操作。鉴于您对性能的警告,我将坚持使用 PHP。但这绝对是我想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多