首页 > 解决方案 > StartDate 无效标识符

问题描述

我有两个连接使用的 SELECT 语句,但UNION出现错误

ORA-00904: "PUSD2"."STARTDATE": invalid identifier

因为我创建了第一个 SELECT 语句并运行,我得到了结果,第二个也是,所以我单独运行,它工作得很好。但是当我使用 UNION 时,我得到错误 pusd2.StartDate 无效标识符。

SELECT * FROM project_users_schedule_dates pusd1
 WHERE pusd1.UserID = 196 AND 
  pusd1.StartDate >= '2020-04-27' AND pusd1.EndDate <= '2020-06-06'  
   UNION 
   SELECT * FROM project_users_schedule_dates pusd2
    WHERE pusd2.UserID = 196 AND 
    pusd2.StartDate <= '2020-04-27' AND pusd2. EndDate >= '2020-06-06' 
     ORDER  BY pusd2.StartDate

这里有什么问题?我做错了什么?

表结构project_users_schedule_dates

在此处输入图像描述

标签: sqloracle

解决方案


该错误可能源于在您的ORDER BY子句的第二个联合中使用别名。但是,我可能会建议以这种方式编写您的查询:

SELECT DISTINCT *
FROM project_users_schedule_dates
WHERE
    UserID = 196 AND 
    (StartDate >= '2020-04-27' AND EndDate <= '2020-06-06' OR
     StartDate <= '2020-04-27' AND EndDate >= '2020-06-06');

这种方法将联合双方的标准集中在一个WHERE子句中。然后它使用 , 而不是联合过滤重复项DISTINCT。请注意,通常SELECT *不希望在联合查询中执行此操作,因为它无法查看包含哪些列。


推荐阅读