0

我有一个包含经理 ID 和员工 ID(逗号分隔)的表,并且我有以下 sql 语句:

选择 manager_id、staff_ids
FROM manager_staffs
WHERE 1 IN (staff_ids)
或 3 英寸 (staff_ids)
或 5 英寸 (staff_ids)
或 23 英寸(staff_ids)
或 12 英寸(staff_ids)
或 16 英寸(staff_ids)
或 19 英寸(staff_ids)
或 32 英寸(staff_ids)
或 123 英寸(staff_ids)
…………

基本上,这是一个很长的查询,有很多“或”条件。如果有办法,我想改进或缩短它。

需要所有 sql 大师的帮助。

4

4 回答 4

1

问题在于您的数据结构 - 不要将所有员工 ID 放在一列中。制作一张桌子 - 你可以称之为 manager_staff:

CREATE TABLE manager_staff (
     manager_id int,
     staff_id int
);

因此,您可以制作记录,显示每个员工向哪个经理汇报。然后您的查询变为:

select manager_id, staff_id from manager_staff where staff_id in (1,3,...);
于 2013-07-17T10:38:56.453 回答
0

假设 staff_ids 是一个逗号分隔的字段,那么您可以执行以下操作。

SELECT DISTINCT manager_id, staff_ids
FROM manager_staffs a
INNER JOIN (SELECT 1 AS staff_id UNION SELECT 3 UNION SELECT 5 UNION SELECT 23 UNION SELECT 12 UNION SELECT 16 UNION SELECT 19 UNION SELECT 32 UNION SELECT 123) b
ON FIND_IN_SET(b.staff_id, a.staff_ids) > 0

但正如我之前评论的那样,将其拆分是一个更好的主意

于 2013-07-17T10:38:20.223 回答
0

我不确定你想达到什么目标,但试试这个:

SELECT manager_id, staff_ids FROM manager_staffs WHERE staff_ids in ('1','3' 等等)

于 2013-07-17T10:31:25.260 回答
0

你为什么不试试这个

    SELECT manager_id, staff_ids
   FROM manager_staffs 
    WHERE staff_ids IN (1,3,5,23,12,16,19,32,123,.......)
  • OR只有当您创建其他表并像上面的查询一样选择它们时,您才能选择如何减少您的 s。

  • 在检索数据时,最好构造您的表以获得性能。

你的桌子应该是这样的

 manager_staff 
 manager_id , staff_id
   1            1
   1            3
   1            5
   1            23
   ..........
于 2013-07-17T10:29:29.630 回答