查询具有逗号分隔值的列

时间:2018-02-09 14:19:20

标签: mysql spring jpa spring-boot

我有2个Mysql表

  1. 分类
  2. id |  name 
    -----------
     1 |  cat1
    
    1. 项目
    2. id |  name | cat_ids
      --------------------
       1 |  prod1| 1,2,3
      

      我有一个用例,我得到一个类别ID,我必须获取所有相关产品。

      我尝试使用类似查询。 (如果我将输入设为1,它不仅会产生1而且还会产生11,12 ...每个数字都有1个错误的产品)

      我在项目中使用spring-boot + jpa。我想过以编程方式执行此操作但是有数千条记录并且迭代不是一个可行的解决方案。

      请建议

      PS: 我知道这是一个非常糟糕的设计。但这传递给了我,我必须处理这个问题。

2 个答案:

答案 0 :(得分:2)

这看起来像是一个糟糕的数据库设计。 您应该有第三个表category_item_relation或类似表:

  1. Category_Item_Relation
    id | cat_id | item_id
    1  |      1 |       1
    2  |      2 |       1
    3  |      3 |       1
    4  | ...
    
  2. 然后您可以使用JOIN

    进行查询
    SELECT * FROM Category
        JOIN Category_Item_Relation ON Category.id = cat_id
        JOIN Item ON Item.id = item_id
    WHERE Category.id = ?
    

答案 1 :(得分:0)

假设您没有权限编辑Martin Hennings所提到的数据库模式。您可以使用条件:如'1,%'或类似'%,1,%'或类似'%,1' ......也假设你没有空格