如何使用where(选择…)

bqf10yzr  于 2021-06-17  发布在  Mysql
关注(0)|答案(2)|浏览(288)

我在做一个非常复杂的报告功能,有很多条件,很多面板,
我的报告里有记录

id    param_filter

101   FIND_IN_SET(t.owner_department,'0620510200,0621510200,0623510200')

查询:

SELECT * 
FROM tbl_abc t WHERE t.id = '1' AND 
      (SELECT mr.param_filter 
       FROM tbl_my_report mr WHERE mr.id = '101'
      )

如何将其用作有效的条件字符串?

6ie5vjzr

6ie5vjzr1#

使用此选项:

SELECT * FROM tbl_abc t WHERE  t.id = '1' IN (SELECT mr.param_filter
FROM tbl_my_report mr WHERE mr.id = '101' );
xcitsw88

xcitsw882#

首先,您应该规范化您的数据,并消除 FIND_IN_SET . 所以,应该有这样的部门表:

id    | owner
'101' | '0620510200'
'101' | '0621510200'
'101' | '0623510200'

此表就绪后,您可以重构查询以:

SELECT * 
FROM tbl_abc t
WHERE
    t.id = '1' AND
    EXISTS (SELECT 1 FROM department WHERE id = '101' AND owner = t.owner_department);

一般来说,应该避免在数据库表中存储csv或其他未规范化的数据,因为这会使查询变得困难。

相关问题