2017-08-13 81 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

謝謝你的幫助..! –