我是 sql 新手,谁能帮我从内部查询中获取有序数据
select
*
from emp
where id
(select order from department where name = 'testing' order by order asc).
我正在从内部查询中获取订单数据,并且使用我得到的 id,我应该从 emp 表中获取与内部查询相同的结果。谁能帮我这个。TIA。
我是 sql 新手,谁能帮我从内部查询中获取有序数据
select
*
from emp
where id
(select order from department where name = 'testing' order by order asc).
我正在从内部查询中获取订单数据,并且使用我得到的 id,我应该从 emp 表中获取与内部查询相同的结果。谁能帮我这个。TIA。
如果将查询重写为连接是合理的:
select e.*
from emp e
inner join department d
on e.id = d.order
where d.name = 'testing'
order by d.order asc
这会改变你的结果是如果有多个行department
具有相同的order
值匹配一个或多个行emp
- 在这种情况下,此查询将返回多行,而原始查询不会。但如果这样的条件不适用,那么这是我推荐的查询。
达米安的回答非常酷和完美。但是如果您仍然想使用子查询,那么试试这个
select *
from emp
where id in (select order from department where name = 'testing' order by order asc)
order by id asc
愿这对你有帮助
如果 emp.id 和 department.order 之间有超过 1 个匹配项,这将给出正确的行数
select * from emp e
where exists
(select 1 from department d where d.name = 'testing'
and e.id = d.order1) -- order is a reserved word in several sql languages
order by id
您的桌子之间似乎发生了一些有趣的事情。部门是否会包含有关 emp 的任何信息(我假设它是员工表)?
不能保证内部查询存在实际的临时表,并且不能保证以某种方式对其进行排序和处理。但是,您可以按 emp.id 对外部查询进行排序。
select * from emp where id in
(select order from department where name = 'testing')
order by id asc
select e.* from emp as e, department d where e.id=d.order and d.name='testing' order by d.order