从部门 id 以 250 和 270 开头的表中派生所有员工?

Posted

技术标签:

【中文标题】从部门 id 以 250 和 270 开头的表中派生所有员工?【英文标题】:Deriving all employees from table having department id starting with 250 and 270? 【发布时间】:2015-07-28 16:05:33 【问题描述】:

我正在使用 SQL plus 和 oracle 10.2.0.1.0。我想从具有更多字段的 ps_job 表中检索部门 (deptidvarchar2) 编号以“270”、“250”开头的员工。

这是我写的查询-

从 ps_job 中选择不同的部门 where deptid in ('250%', '270%');

它没有显示任何行,如果我删除不同的行,它也会给我很多结果,但结果也有重复。

【问题讨论】:

【参考方案1】:

in 不接受通配符。这样做:

select distinct deptid from ps_job 
where (deptid like '250%'
       or deptid like '270%');

或者:

select distinct deptid from ps_job 
where substr(deptid,1,3) in ('250', '270');

虽然它不会在 deptid 上使用索引,而第一个版本可能(但可能不会)。

【讨论】:

为什么要区分 deptid 而不是employeeid? - 如果一个employeeid 是两个deptid 的一部分怎么办? 我不知道 - 这不是我的问题!【参考方案2】:

我做了什么,我将查询分解为 2 个不同的查询。 1 代表 250,其他代表 270,我使用 LIKE,之前使用的是 IN,但不知何故无法正常工作。

从 ps_job 中选择不同的部门 其中 deptid LIKE '250%';

从 ps_job 中选择不同的部门 其中 deptid LIKE '250%';

Bob,就您而言,我们的数据库没有这样的规定,因为我们使用有效日期和顺序,所以它可以确保员工目前有 1 个部门 ID。

【讨论】:

以上是关于从部门 id 以 250 和 270 开头的表中派生所有员工?的主要内容,如果未能解决你的问题,请参考以下文章

从数据库中提取单独的表

如何批量删除数据库中同一字段开头的表?

如何仅在更新后触发以“Table_”开头的表的触发器

如何为超过 3000 万行和 250 列的表优化 Oracle 创建表功能

如何在mysql中查询以某个字符开头的表 如何在mysql中查询以某个字符开头的表

在访问数据库中插入以零开头的值