我在查询中遇到了一个sql问题,我将多个雇员id存储在一个用逗号分隔的表中

eni9jsuy  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(270)

这个问题在这里已经有答案了

在数据库列中存储分隔列表真的那么糟糕吗(10个答案)
两年前关门了。
我对sql有问题 IN 查询:我在一个表中存储多个雇员ID,每个ID用逗号分隔 task . 当我试着去拿 task 带着一个 IN 查询,我没有得到包含员工ID的行。
我的问题是:

select 
   t.*, 
   e.emp_name, 
   d.department_name 
from 
   task as t 
   LEFT JOIN employee as e on(e.emp_id=t.assign_to) 
   LEFT JOIN department as d on(d.depart_id=e.depart_id) 
where 
   t.task_status='PENDING' 
   AND t.created_by!='31' 
   AND t.assign_to IN ('31') 
order by 
   t.task_id DESC

数据库中的存储值

j8ag8udp

j8ag8udp1#

我的工作不是这样的
如果您的数据看起来像:

ManagerName, ManagerOf
'John', 'Steve,Sarah,Dave'

你不能这样做:

SELECT * FROM managers WHERE 'sarah' IN ManagerOf

在中,最好设想为或的延伸:

SELECT * FROM managers WHERE managerof IN ('Sarah','Steve')
--is the same as:
SELECT * FROM managers WHERE 
  managerof = 'Sarah' OR
  managerof = 'Steve'

or子句的数量与in列表中的项的数量相同。
希望这能告诉你为什么数据库不返回任何结果。。因为 Steve,Sarah,Dave 不等于 Sarah 或者 Steve . 数据库不会看逗号然后说“哦,那是一个列表”——它只是一个字符串,偶尔碰巧有一个逗号字符
有令人讨厌的快速黑客来达到你想要的,使用喜欢和字符串concat,但他们不值得一个答案,老实说
您需要更改数据库结构,以包含一个新表,该表跟踪任务id及其分配给的员工id。完成此操作后,您将能够在employee id列上使用in,正如您希望的那样

相关问题