1

我是 sql 新手,谁能帮我从内部查询中获取有序数据

select 
    * 
from emp 
where id 
    (select order from department where name = 'testing' order by order asc).

我正在从内部查询中获取订单数据,并且使用我得到的 id,我应该从 emp 表中获取与内部查询相同的结果。谁能帮我这个。TIA。

4

5 回答 5

2

如果将查询重写为连接是合理的:

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- 在这种情况下,查询将返回多行,而原始查询不会。但如果这样的条件不适用,那么这是我推荐的查询。

于 2013-09-30T08:46:42.050 回答
1

达米安的回答非常酷和完美。但是如果您仍然想使用子查询,那么试试这个

select * 
from emp 
where id in (select order from department where name = 'testing' order by order asc) 
order by id asc

愿这对你有帮助

于 2013-09-30T08:53:04.510 回答
1

如果 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 的任何信息(我假设它是员工表)?

于 2013-09-30T09:05:04.913 回答
0

不能保证内部查询存在实际的临时表,并且不能保证以某种方式对其进行排序和处理。但是,您可以按 emp.id 对外部查询进行排序。

select * from emp where id in 
     (select order from department where name = 'testing')
order by id asc
于 2013-09-30T08:51:39.333 回答
0
select e.* from emp as e, department d where e.id=d.order and d.name='testing' order by d.order 
于 2013-09-30T08:53:46.577 回答