簡體   English   中英

條件問題

[英]IN condition issue

您能解釋為什么當我患病時結果沒有按書寫時的順序返回嗎?

我正在嘗試從all_tab_columns中提取列名,並且希望以in條件中指定的相同順序來檢索它們。

例如:

select * from all_tab_columns
where table_name='X'
and column_name in ('d','a','Z','e');

輸出為:

column_name

ade Z

我希望輸出的順序與IN條件中指定的順序相同。

你能建議嗎?

您可以使用您選擇的特定順序創建CTE,將其與all_tab_columns一起加入,並按CTE順序進行訂購。

WITH ord (rn, column_name)
     AS (SELECT 1, 'd' FROM DUAL
         UNION ALL
         SELECT 2, 'a' FROM DUAL
         UNION ALL
         SELECT 3, 'Z' FROM DUAL
         UNION ALL
         SELECT 4, 'e' FROM DUAL)
  SELECT *
    FROM all_tab_columns t JOIN ORD o ON t.column_name = o.column_name
   WHERE table_name = 'X'
ORDER BY o.rn;

默認情況下,Oracle在IN CLAUSE以升序檢索結果。 您需要在Order by Clause中明確提及要檢索數據集的Order by 用這個:

select * from all_tab_columns 
where table_name='X'
and column_name in  ('d','a','Z','e')
order by decode(column_name,'d',1,'a',2,'Z',3);

演示

從數據庫中按某種排序的順序檢索數據的唯一方法是在查詢中包含ORDER BY。 不能替代ORDER BY。

謝謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM