繁体   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