首页 > 解决方案 > 如何在 coumn_name 有逗号分隔值的情况下运行 sql 查询?

问题描述

CustomerID  cat_id  ContactName  Address    City    PostalCode  Country
1   Alfreds 13      Maria Anders Obere Str  Berlin  12209   Germany
4   Around  13,14   Thomas Hardy 120 Hanov  London  WA1 1DP UK

获取 14 条数据的查询是什么?我努力了

SELECT * 
FROM `customers` 
WHERE cat_id IN (13,14) 

但失败了。

标签: mysqlsql

解决方案


修复你的数据模型!为什么是错的?

  • 数值应存储在具有正确类型的列中,而不是字符串。
  • 这些看起来像 id。应正确定义外键关系。
  • SQL 的字符串处理能力很差。
  • 使用字符串操作的查询通常无法优化,从而优化使用索引、表统计信息和分区。
  • SQL 有这种非常棒的数据结构来存储列表。它被称为

因此,您应该有一个表格,其中每行customer_idcat_id. 这通常称为“联结表”或“关联表”。

也就是说,有时我们会被其他人所困,非常非常非常糟糕的设计决策。如果是这样,你可以做你想做的事find_in_set()

where find_in_set(13, cat_ids) > 0 and  -- or is that "or"
      find_in_set(14, cat_ids) > 0

推荐阅读