【问题标题】:Sorting data by a column without in SELECT list按没有在 SELECT 列表中的列对数据进行排序
【发布时间】:2018-10-06 15:52:13
【问题描述】:
     SELECT old.REF_ID, old.DATE FROM REFID_HISTORY old 
     INNER JOIN REFID_HISTORY new 
     ON new.REF_ID = old.REF_ID 
UNION
     SELECT new.REF_ID, new.DATE FROM REFID_HISTORY new
     INNER JOIN REFID_HISTORY old
     ON new.REF_ID = old._REF_ID
ORDER BY DATE DESC;

上面的脚本显示了REFID 的家谱。不选择REF_ID怎么能按DATE排序?

【问题讨论】:

  • 您的查询毫无意义。这两个子查询似乎返回相同的结果。

标签: sql oracle sorting select


【解决方案1】:

将您的查询用作子查询,然后仅选择您要显示的那些列。像这样:

SELECT REF_ID
FROM (
      SELECT old.REF_ID, old.DATE FROM REFID_HISTORY old 
      INNER JOIN REFID_HISTORY new 
      ON new.REF_ID = old.REF_ID 
      UNION
      SELECT new.REF_ID, new.DATE FROM REFID_HISTORY new
      INNER JOIN REFID_HISTORY old
      ON new.REF_ID = old._REF_ID
     ) t
ORDER BY DATE DESC;

我创建了一个示例演示看看:

http://sqlfiddle.com/#!4/d5e9e8/3

已编辑: 问。对于 Cust_ID = 'ABC123'

SELECT REF_ID
FROM (
      SELECT old.REF_ID, old.CUST_ID,old.DATE FROM REFID_HISTORY old 
      INNER JOIN REFID_HISTORY new 
      ON new.REF_ID = old.REF_ID 
      UNION
      SELECT new.REF_ID, new.CUST_ID, new.DATE FROM REFID_HISTORY new
      INNER JOIN REFID_HISTORY old
      ON new.REF_ID = old._REF_ID
     ) t
WHERE CUST_ID = 'ABC123'
ORDER BY DATE DESC;

【讨论】:

  • 抱歉,我正在考虑在主查询中使用 WHERE 子句来增强此脚本,cust_id='ABC123' 但我点击了invalid identifier
  • 提供表格和它的列然后我会尽力帮助
  • 名称为空?类型 ---------- -------- ------------ CUST_ID NOT NULL VARCHAR2(32) REF_ID NOT NULL VARCHAR2(32) DATE DATE
  • CUST_IDREF_ID都是PK,想查询所有REF_ID where CUST_ID=xxx
  • 因为 Cust_id 列不在查询中,如何使用它来过滤数据,这就是我在子查询中添加它的原因
【解决方案2】:

我没有收到查询。为什么不这样做呢?

SELECT h.REF_ID
FROM REFID_HISTORY h
ORDER BY h.DATE DESC;

这似乎比你的方法简单得多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-24
    • 1970-01-01
    • 2015-03-05
    • 2021-02-07
    相关资源
    最近更新 更多