单行子查询在日期列上返回多于一行

时间:2019-02-07 19:45:37

标签: sql oracle date

我有一个在Oracle中遇到此问题的代码:“单行子查询返回多个行”当我仅使用内联代码时,它就起作用了

我只尝试了下面的内联代码,它正常工作

select TO_CHAR(TO_DATE(theDATE,'DD.MM.YYYY HH24:MI', 'NLS_DATE_LANGUAGE = 
   NORWEGIAN'),
       'DD/MM/YYYY') 
       from mastertable

但是通过组合两个select语句,代码组合无法正常工作

   SELECT  aircraft
    , country
     ,   (select TO_CHAR(TO_DATE(theDATE,'DD.MM.YYYY HH24:MI', 'NLS_DATE_LANGUAGE 
  = NORWEGIAN'),
       'DD/MM/YYYY') 
       from mastertable )

        FROM mastertable

   FULL OUTER JOIN continent ON mastertable.id = continent.id

2 个答案:

答案 0 :(得分:1)

你为什么不简单

SELECT m.aircraft,
       c.country,
       to_char(to_date(m.thedate, 'dd.mm.yyyy hh24:mi', 'nls_date_language = norwegian'), 'dd/mm/yyyy') the_date
FROM mastertable m full outer join continent c on m.id = c.id;

我的意思是,您试图(滥用)查询的目的是什么?

此外,THEDATE的数据类型是什么?看起来像VARCHAR2;是吗? NLS_DATE_LANGUAGE在这里有什么好处?您只需要处理个数字(没有月或日的名称),就可以简化为

to_char(to_date(m.thedate, 'dd.mm.yyyy hh24:mi'), 'dd/mm/yyyy')

答案 1 :(得分:0)

您需要将子查询限制为仅一个ID作为

SELECT aircraft,
       country,
       (select TO_CHAR(TO_DATE(theDATE,
                               'DD.MM.YYYY HH24:MI',
                               'NLS_DATE_LANGUAGE 
  = NORWEGIAN'),
                       'DD/MM/YYYY')
          from mastertable
         where id = m.id 
          )
  FROM mastertable m
  FULL OUTER JOIN continent c
    ON m.id = c.id

假定ID是主键列。