2017-08-13 206 views
0

我想更改oracle查询的输出顺序。 查询:更改oracle查询的输出顺序

select name,address from users where name=any(select u.name from users u,bookingdetails b where u.user_id=b.user_id and b.name != 'HDFC') and address=any(select u.address from users u,bookingdetails b where u.user_id=b.user_id and b.name != 'HDFC'); 

它的输出:

NAME 
-------------------- 
ADDRESS 
-------------------------------------------------------------------------------- 
Johan 
Delhi 

John 
Bangalore 

Krena 
Mumbai 
Target output--: 
NAME 
-------------------- 
ADDRESS 
-------------------------------------------------------------------------------- 
John 
Bangalore 

Krena 
Mumbai 

Johan 
Delhi 

我怎样才能达到这个效果。任何帮助/建议?

+0

你解释了一个用于按照预期顺序打印记录的规则?为什么'约翰/班加罗尔'必须在最后,而'约翰/德里'必须是第一个? – krokodilko

+0

其实我在网上练习,这是他们的预期结果。所以不太确定它为什么会搞砸。我尝试了名字和地址,但没有好处。 :( –

+0

也有一种方法来优化我的查询,它似乎太笨重。 –

回答

1

这应该做的工作:

select name, address from users 
where name=any(select u.name from users u, bookingdetails b 
       where u.user_id=b.user_id and b.name != 'HDFC') 
    and address=any(select u.address from users u, bookingdetails b 
        where u.user_id=b.user_id and b.name != 'HDFC') 
Order By Decode(name, 'John', 1, 'Krena', 2, 3); 

至于你在评论中提到优化查询,我相信这个查询将获得相同的结果更简洁:

select u.name, u.address from users u 
where u.user_id in (select b.user_id from bookingdetails b 
         where b.name != 'HDFC') 
Order By Decode(u.name, 'John', 1, 'Krena', 2, 3); 
莫非
+0

谢谢你的工作。我不知道有一个解码功能可用。:) –

+0

我包括第二个查询,寻求解决您的意见优化。但是,如果没有描述查询实际上打算做什么,我只是做出一个有根据的猜测。 – Kirby

+0

谢谢你的帮助..! –