【问题标题】:MySQL “Unknown column” in subquery子查询中的 MySQL“未知列”
【发布时间】:2013-01-09 02:25:32
【问题描述】:
SELECT  
hi_proins0.PROC_INST_ID_  processId,
act_re_procdef.NAME_ processName,
(
     #Unknown column 'hi_proins0.PROC_INST_ID_' in 'where clause'
   SELECT IFNULL(ct,0) FROM (
       SELECT COUNT(*) FROM act_hi_taskinst hi_task1
            INNER JOIN act_hi_procinst hi_proins1
                ON hi_task1.PROC_INST_ID_ = hi_proins1.PROC_INST_ID_
            WHERE  hi_proins1.PROC_INST_ID_ = hi_proins0.PROC_INST_ID_
                AND hi_task1.ASSIGNEE_ != hi_proins1.START_USER_ID_
                AND hi_task1.ASSIGNEE_ = hi_task0.ASSIGNEE_
            GROUP BY hi_task1.ASSIGNEE_
       ) ti

) approvalNodeCount,
(
   ...
) spendTime FROM 
  act_hi_taskinst hi_task0

LEFT JOIN act_hi_procinst hi_proins0 ON hi_proins0.PROC_INST_ID_ = hi_task0.PROC_INST_ID_
INNER JOIN act_re_procdef ON act_re_procdef.ID_ = hi_proins0.PROC_DEF_ID_ 
GROUP BY hi_proins0.PROC_INST_ID_

它会在“where 子句”中抛出未知列“hi_proins0.PROC_INST_ID_” 上

 SELECT IFNULL(ct,0) FROM (
   ...
 ) ti

ifnull 在上面不起作用

如何解决? :D

【问题讨论】:

  • 您需要将 where 子句移到查询的底部。
  • 您只在子查询中连接表 act_hi_taskinst (hi_task1) 和 act_hi_procinst (hi_poins1),但没有名称为 hi_proins0 的表或别名。也许您需要另一个与表的连接(但您似乎已经有 act_hi_procinst)或在子查询中将 WHERE hi_proins1.PROC_INST_ID_ = hi_proins0.PROC_INST_ID_ AND hi_task1.ASSIGNEE_ != hi_proins1.START_USER_ID_ 更改为 WHERE hi_task1.ASSIGNEE_ != hi_proins1.START_USER_ID_
  • 修复此错误后,您将遇到另一个类似的错误。因为在AND hi_task1.ASSIGNEE_ = hi_task0.ASSIGNEE_ 子句中您使用了hi_task0 引用,但它也不存在。

标签: mysql select subquery ifnull


【解决方案1】:

试试这个:

SELECT hi_proins0.PROC_INST_ID_  processId, act_re_procdef.NAME_ processName,
       IFNULL((SELECT COUNT(*) FROM act_hi_taskinst hi_task1
               INNER JOIN act_hi_procinst hi_proins1 ON hi_task1.PROC_INST_ID_ = hi_proins1.PROC_INST_ID_
               WHERE hi_proins1.PROC_INST_ID_ = hi_proins0.PROC_INST_ID_    AND 
                     hi_task1.ASSIGNEE_ != hi_proins1.START_USER_ID_ AND hi_task1.ASSIGNEE_ = hi_task0.ASSIGNEE_
               GROUP BY hi_task1.ASSIGNEE_
            ), 0 ) approvalNodeCount,
(
   ...
) spendTime 
FROM act_hi_taskinst hi_task0
LEFT JOIN act_hi_procinst hi_proins0 ON hi_proins0.PROC_INST_ID_ = hi_task0.PROC_INST_ID_
INNER JOIN act_re_procdef ON act_re_procdef.ID_ = hi_proins0.PROC_DEF_ID_ 
GROUP BY hi_proins0.PROC_INST_ID_

【讨论】:

  • @Bodhi'maN 您在嵌套子查询中使用了列 (hi_proins0.PROC_INST_ID_),MySQL 不支持在 SELECT 部分嵌套子查询它只允许子查询。
  • @Bodhi'maN 欢迎来到 Stack Overflow
猜你喜欢
  • 2013-10-20
  • 2015-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多