Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-无效标识符,但在哪里?_Sql_Oracle_Union - Fatal编程技术网

SQL-无效标识符,但在哪里?

SQL-无效标识符,但在哪里?,sql,oracle,union,Sql,Oracle,Union,我是SQL的初学者,我已经尝试了几个小时的训练,这有什么问题: select to_char(date_Created, 'MON DD YYYY') as jours, action, count(ID) from Logs group by action, to_char(date_Created, 'MON DD YYYY') union select distinct to_char(date_Created, 'MON DD YYYY'), action, 0 from Logs

我是SQL的初学者,我已经尝试了几个小时的训练,这有什么问题:

select to_char(date_Created, 'MON DD YYYY') as jours,  action, count(ID)
from Logs
group by action, to_char(date_Created, 'MON DD YYYY') 
union
select distinct to_char(date_Created, 'MON DD YYYY'), action, 0
from Logs
WHERE jours BETWEEN 'AVR.  14 2014' AND 'AVR.  15 2014'
当我尝试时,它返回一个错误:

ORA-00904: "JOURS" : identificateur non valide
00904. 00000 -  "%s: invalid identifier"
*Cause:    
*Action:
Erreur à la ligne 7, colonne 6
谢谢

那么:

select to_char(date_Created, 'MON DD YYYY') as jours,  action, count(ID)
from Logs
group by action, to_char(date_Created, 'MON DD YYYY') 
union
select distinct to_char(date_Created, 'MON DD YYYY') as jours, action, 0
from Logs
WHERE to_char(date_Created, 'MON DD YYYY') BETWEEN 'AVR 14 2014' AND 'AVR 15 2014'
那么:

select to_char(date_Created, 'MON DD YYYY') as jours,  action, count(ID)
from Logs
group by action, to_char(date_Created, 'MON DD YYYY') 
union
select distinct to_char(date_Created, 'MON DD YYYY') as jours, action, 0
from Logs
WHERE to_char(date_Created, 'MON DD YYYY') BETWEEN 'AVR 14 2014' AND 'AVR 15 2014'

导致您的问题的原因是标准SQL不允许您在WHERE子句中引用列别名。之所以施加此限制,是因为在执行WHERE代码时,列值可能尚未确定。您不能使用“JOURS”标签,因为WHERE代码尚未意识到它。

导致问题的原因是标准SQL不允许您在WHERE子句中引用列别名。之所以施加此限制,是因为在执行WHERE代码时,列值可能尚未确定。您不能使用“JOURS”标签,因为WHERE代码尚未意识到它。

您的
SELECT
中的问题是
WHERE
子句应用于最后一个
SELECT
,其中,
jours
未定义。您可以通过将查询包装到另一个
SELECT
中来修复它,如下所示:

SELECT * FROM (
    -- Here is your original query without the WHERE clause
    select to_char(date_Created, 'MON DD YYYY') as jours,  action, count(ID)
    from Logs
    group by action, to_char(date_Created, 'MON DD YYYY') 
union
    select distinct to_char(date_Created, 'MON DD YYYY'), action, 0
    from Logs
) as inner
-- Here is your WHERE clause
WHERE jours BETWEEN 'AVR.  14 2014' AND 'AVR.  15 2014'

现在,生成
jours
的查询已经包装好,从
WHERE
子句中引用该列是合法的。

您的
SELECT
中的问题是
WHERE
子句应用于最后一个
SELECT
,其中没有定义
jours
。您可以通过将查询包装到另一个
SELECT
中来修复它,如下所示:

SELECT * FROM (
    -- Here is your original query without the WHERE clause
    select to_char(date_Created, 'MON DD YYYY') as jours,  action, count(ID)
    from Logs
    group by action, to_char(date_Created, 'MON DD YYYY') 
union
    select distinct to_char(date_Created, 'MON DD YYYY'), action, 0
    from Logs
) as inner
-- Here is your WHERE clause
WHERE jours BETWEEN 'AVR.  14 2014' AND 'AVR.  15 2014'

现在,生成
jours
的查询已经包装好,从
WHERE
子句中引用该列是合法的。

这意味着表
logs
中没有名为
jours
的列。可能您想要的列被称为
jour
或其他什么。错误确实指向了第7行第6列。不能在where子句中使用焦耳,因为它不是列,而是计算字段。您必须用整个表达式替换
jours
。如果您编辑问题来描述您试图执行的操作,则可能还有其他方法来编写查询。这意味着您在表
logs
中没有名为
jours
的列。可能您想要的列被称为
jour
或其他什么。错误确实指向了第7行第6列。不能在where子句中使用焦耳,因为它不是列,而是计算字段。您必须用整个表达式替换
jours
。如果您编辑问题来描述您正在尝试执行的操作,则可能还有其他方法来编写查询。创建日期的格式掩码应为“MON”。DD YYYY'和日期值应为“AVR”。2014年12月14日和2014年12月14日。15 2014'(在AVR.和14/15之间没有额外的空格。创建日期的格式掩码应为“MON.DD YYYY”,日期值应为“AVR.14 2014”和“AVR.15 2014”(在AVR.和14/15之间没有额外的空格)。