1

我正在尝试运行以下查询:

SELECT parent_id, id, due_date, object_subtype
  FROM amatia_logtask
 WHERE parent_id IN (SELECT id_actividad
                       FROM amatia_actividades
                      WHERE id_actividad = '12624'
                         OR id_padre = '12624')
 GROUP BY parent_id id

但是,我无法理解错误消息:

ORA-00933: SQL command not properly ended
00933. 00000 -  "SQL command not properly ended"
*Cause:    
*Action:
Error at Line: 9 Column: 41

请问你能提供一个解释吗?

4

4 回答 4

3

您有两列,GROUP BY它们之间没有逗号:

group by parent_id, id
                  ^ --- missing this

但是,如果您尝试对列进行分组,那么您可以GROUP BY对所有字段进行分组:

 group by parent_id, id, due_date, object_subtype
于 2013-01-21T14:49:04.460 回答
2

目前尚不清楚您要做什么-以下将为您提供不同的列表:

SELECT DISTINCT y.parent_id, y.id, y.due_date, y.object_subtype
  FROM amatia_logtask y
 WHERE y.parent_id IN (SELECT x.id_actividad
                         FROM amatia_actividades x
                        WHERE '12624' IN (x.id_actividad, x.id_padre))

Oracle 不允许您从 GROUP BY 中省略列,因此任何需要包装在聚合函数中的列。IE:

SELECT y.parent_id, y.id, 
       MAX(y.due_date) AS due_date, MIN(y.object_subtype) AS object_subtype
  FROM amatia_logtask y
 WHERE y.parent_id IN (SELECT x.id_actividad
                         FROM amatia_actividades x
                        WHERE '12624' IN (x.id_actividad, x.id_padre))
GROUP BY y.parent_id, y.id
于 2013-01-21T14:53:41.267 回答
2

GROUP BY子句是逗号分隔的列或表达式列表,因此您缺少逗号。

您仍然会收到错误消息,因为 SELECT 子句中的所有表达式都需要按或聚合(使用聚合函数)进行分组。

所以你可能想写:

SELECT parent_id, id, due_date, object_subtype
  FROM amatia_logtask
 WHERE parent_id IN (SELECT id_actividad
                       FROM amatia_actividades
                      WHERE id_actividad = '12624'
                         OR id_padre = '12624')
 GROUP BY parent_id, id, due_date, object_subtype

没有聚合的查询GROUP BY本质上是一个DISTINCT查询,因此您也可以在此处使用 distinct 来暗示您的意图:

SELECT DISTINCT parent_id, id, due_date, object_subtype
  FROM amatia_logtask
 WHERE parent_id IN (SELECT id_actividad
                       FROM amatia_actividades
                      WHERE id_actividad = '12624'
                         OR id_padre = '12624')
于 2013-01-21T14:53:59.917 回答
0

试试这个

SELECT parent_id, id, due_date, object_subtype
  FROM amatia_logtask
 WHERE parent_id IN (SELECT id_actividad
                       FROM amatia_actividades
                      WHERE id_actividad = '12624'
                         OR id_padre = '12624')
 GROUP BY parent_id,id

你只是在从句中缺少逗号。GROUP BY祝你好运

于 2013-01-22T07:53:17.563 回答