消除MySQl视图中FROM子句存在的子查询 高手指教!!

豆豆和小豆包 2014-03-11 05:18:58
CREATE
VIEW `view_execution_details` AS SELECT
(eh.ID+""+d.DEVICE_ID) as id,
detail.GRID_DATA ,
d.IP_ADDRESS ,
eh.JOB_NAME ,
eh.JOB_GROUP ,
eh.JOB_TYPE ,
eh.JOB_CLASS ,
detail.START_TIME ,
detail.END_TIME ,
eh.EXECUTOR ,
eh.STATUS ,
detail.ID as detail_id,
detail.EXECUTION_ID ,
detail.ERROR ,
detail.DETAILS
FROM
execution_history eh ,
device d ,
(
SELECT
*
FROM
backup_details bd
UNION ALL SELECT
*
FROM
tool_details td
UNION ALL SELECT
*
FROM
restore_details rd
UNION ALL SELECT
*
FROM
discovery_details dd
) detail
WHERE
eh.id = detail.EXECUTION_ID
AND d.device_id = detail.device_id;


其中backup_details、tool_details、discovery_details、restore_details四张表的结构是完全相同的。

出现错误:
ERROR 1349 (HY000) at line 1: View's SELECT contains a subquery in the FROM clause
BUILD SUCCESSFUL

在derby数据库中可执行成功,在mysql中创建时因限制条件执行报错,求如何消除from子句中的子查询使能够成功建立视图,请高手指教!
...全文
680 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
niboya 2015-05-07
  • 打赏
  • 举报
回复
能问您一下以前的那个freemaker导出word合并单元格的问题吗?QQ:741915578 谢谢了
豆豆和小豆包 2014-03-11
  • 打赏
  • 举报
回复
引用 3 楼 ACMAIN_CHM 的回复:
CREATE
    VIEW `view_execution_details` AS SELECT
    	 (eh.ID+""+d.DEVICE_ID) as id,
        detail.GRID_DATA ,
        d.IP_ADDRESS ,
        eh.JOB_NAME ,
        eh.JOB_GROUP ,
        eh.JOB_TYPE ,
        eh.JOB_CLASS ,
        detail.START_TIME ,
        detail.END_TIME ,
        eh.EXECUTOR ,
        eh.STATUS ,
        detail.ID as detail_id,
        detail.EXECUTION_ID ,
        detail.ERROR ,
        detail.DETAILS
    FROM
        execution_history eh ,
        device d ,
        backup_details detail
    WHERE
        eh.id = detail.EXECUTION_ID
        AND d.device_id = detail.device_id
	
	UNION ALL
	
	SELECT
    	 (eh.ID+""+d.DEVICE_ID) as id,
        detail.GRID_DATA ,
        d.IP_ADDRESS ,
        eh.JOB_NAME ,
        eh.JOB_GROUP ,
        eh.JOB_TYPE ,
        eh.JOB_CLASS ,
        detail.START_TIME ,
        detail.END_TIME ,
        eh.EXECUTOR ,
        eh.STATUS ,
        detail.ID as detail_id,
        detail.EXECUTION_ID ,
        detail.ERROR ,
        detail.DETAILS
    FROM
        execution_history eh ,
        device d ,
        tool_details detail
    WHERE
        eh.id = detail.EXECUTION_ID
        AND d.device_id = detail.device_id
	
	UNION ALL
	
	SELECT
    	 (eh.ID+""+d.DEVICE_ID) as id,
        detail.GRID_DATA ,
        d.IP_ADDRESS ,
        eh.JOB_NAME ,
        eh.JOB_GROUP ,
        eh.JOB_TYPE ,
        eh.JOB_CLASS ,
        detail.START_TIME ,
        detail.END_TIME ,
        eh.EXECUTOR ,
        eh.STATUS ,
        detail.ID as detail_id,
        detail.EXECUTION_ID ,
        detail.ERROR ,
        detail.DETAILS
    FROM
        execution_history eh ,
        device d ,
        restore_details detail
    WHERE
        eh.id = detail.EXECUTION_ID
        AND d.device_id = detail.device_id
	
	UNION ALL
	
	SELECT
    	 (eh.ID+""+d.DEVICE_ID) as id,
        detail.GRID_DATA ,
        d.IP_ADDRESS ,
        eh.JOB_NAME ,
        eh.JOB_GROUP ,
        eh.JOB_TYPE ,
        eh.JOB_CLASS ,
        detail.START_TIME ,
        detail.END_TIME ,
        eh.EXECUTOR ,
        eh.STATUS ,
        detail.ID as detail_id,
        detail.EXECUTION_ID ,
        detail.ERROR ,
        detail.DETAILS
    FROM
        execution_history eh ,
        device d ,
        discovery_details detail
    WHERE
        eh.id = detail.EXECUTION_ID
        AND d.device_id = detail.device_id
	
版主威武,但是这个SQl会不会太长了?可以优化么?
豆豆和小豆包 2014-03-11
  • 打赏
  • 举报
回复
引用 2 楼 benluobobo 的回复:
mysql的bug, 可以先对子查询建立一个View,下一步将你上面的语句里面的子查询改成View去连接
额,就是因为不想建两个视图才请教有木有消除子查询的办法的
豆豆和小豆包 2014-03-11
  • 打赏
  • 举报
回复
引用 1 楼 WWWWA 的回复:
另外建立1个VIEW OR 将VIEW保存为表
保存为表后数据不会自动引用需要插入以后才有数据
ACMAIN_CHM 2014-03-11
  • 打赏
  • 举报
回复
CREATE
    VIEW `view_execution_details` AS SELECT
    	 (eh.ID+""+d.DEVICE_ID) as id,
        detail.GRID_DATA ,
        d.IP_ADDRESS ,
        eh.JOB_NAME ,
        eh.JOB_GROUP ,
        eh.JOB_TYPE ,
        eh.JOB_CLASS ,
        detail.START_TIME ,
        detail.END_TIME ,
        eh.EXECUTOR ,
        eh.STATUS ,
        detail.ID as detail_id,
        detail.EXECUTION_ID ,
        detail.ERROR ,
        detail.DETAILS
    FROM
        execution_history eh ,
        device d ,
        backup_details detail
    WHERE
        eh.id = detail.EXECUTION_ID
        AND d.device_id = detail.device_id
	
	UNION ALL
	
	SELECT
    	 (eh.ID+""+d.DEVICE_ID) as id,
        detail.GRID_DATA ,
        d.IP_ADDRESS ,
        eh.JOB_NAME ,
        eh.JOB_GROUP ,
        eh.JOB_TYPE ,
        eh.JOB_CLASS ,
        detail.START_TIME ,
        detail.END_TIME ,
        eh.EXECUTOR ,
        eh.STATUS ,
        detail.ID as detail_id,
        detail.EXECUTION_ID ,
        detail.ERROR ,
        detail.DETAILS
    FROM
        execution_history eh ,
        device d ,
        tool_details detail
    WHERE
        eh.id = detail.EXECUTION_ID
        AND d.device_id = detail.device_id
	
	UNION ALL
	
	SELECT
    	 (eh.ID+""+d.DEVICE_ID) as id,
        detail.GRID_DATA ,
        d.IP_ADDRESS ,
        eh.JOB_NAME ,
        eh.JOB_GROUP ,
        eh.JOB_TYPE ,
        eh.JOB_CLASS ,
        detail.START_TIME ,
        detail.END_TIME ,
        eh.EXECUTOR ,
        eh.STATUS ,
        detail.ID as detail_id,
        detail.EXECUTION_ID ,
        detail.ERROR ,
        detail.DETAILS
    FROM
        execution_history eh ,
        device d ,
        restore_details detail
    WHERE
        eh.id = detail.EXECUTION_ID
        AND d.device_id = detail.device_id
	
	UNION ALL
	
	SELECT
    	 (eh.ID+""+d.DEVICE_ID) as id,
        detail.GRID_DATA ,
        d.IP_ADDRESS ,
        eh.JOB_NAME ,
        eh.JOB_GROUP ,
        eh.JOB_TYPE ,
        eh.JOB_CLASS ,
        detail.START_TIME ,
        detail.END_TIME ,
        eh.EXECUTOR ,
        eh.STATUS ,
        detail.ID as detail_id,
        detail.EXECUTION_ID ,
        detail.ERROR ,
        detail.DETAILS
    FROM
        execution_history eh ,
        device d ,
        discovery_details detail
    WHERE
        eh.id = detail.EXECUTION_ID
        AND d.device_id = detail.device_id
	
benluobo 2014-03-11
  • 打赏
  • 举报
回复
mysql的bug, 可以先对子查询建立一个View,下一步将你上面的语句里面的子查询改成View去连接
WWWWA 2014-03-11
  • 打赏
  • 举报
回复
另外建立1个VIEW OR 将VIEW保存为表

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧