2013-09-30 88 views
1

我是新來的SQL,任何一個可以請幫我從內部查詢得到有序的數據如何通過內部查詢來獲取訂單

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

我從內部查詢,並與獲得訂單數據ID的我得到我應該從emp表中得到的結果是在內部查詢相同的順序。誰能幫我這個。 TIA。

+2

我想你已經在'id'和'('之間放了一個'in',這樣可以更好地完成內部連接而不是子查詢 - 這是一個合理的改變嗎?唯一能確定性地確定查詢結果的順序是在最外面的SELECT語句中有一個ORDER BY。 –

回答

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一行或多行 - 在這種情況下,這個查詢將返回多行,而原來不會。但是,如果這種情況不適用,那麼這是我建議的查詢。

+0

對不起,我沒有在dept和emp表之間設置任何關係。 ?@Damien_The_Unbeliever – Vijay

+1

@Vijay - 是的,沒關係,SQL允許你在表之間編寫任意的連接條件 - 你不必只遵循定義的外鍵 –

+0

你錯過了where子句,但答案很好 – veljasije

0

不能保證有內部查詢的實際臨時表,並且它是以特定方式排序和處理的。但是,您可以通過emp.id對外部查詢進行排序。

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

達米安的回答是相當酷和完美。但如果你還是想要去與子查詢那就試試這個

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

願這幫助你

+0

謝謝! vikash-singh,但我想要訂單在部門的順序欄不是基於emp ID。那是不可想象的? – Vijay

+0

然後使用** group by id **代替* by id *。 –

0
select e.* from emp as e, department d where e.id=d.order and d.name='testing' order by d.order 
0

這會給行權數量的情況下,emp.id之間有超過1場比賽department.order

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的信息(我認爲它是員工表)?