-
mysql临时表子查询15
DROP TABLE IF EXISTS TEMP_RESULT_Copy ;
CREATE TEMPORARY TABLE TEMP_RESULT (
#CREATE TABLE PROSPERITI.TEMP_RESULT(
COUNT_USER BIGINT,
STATUS_USER VARCHAR(20),
PROGRAM_NAME VARCHAR(255),
RECEIVE VARCHAR(255),
SEND VARCHAR(255),
elig_type varchar(20),
PROGRAM_ID BIGINT
);
我在一个存储过程里面有这样一个子临时表,往里面放了很多东东,现在要子查询出来,如何实现
问题补充:
DROP TABLE IF EXISTS TEMP_RESULT_Copy ;
CREATE TEMPORARY TABLE TEMP_RESULT (
#CREATE TABLE PROSPERITI.TEMP_RESULT(
COUNT_USER BIGINT,
STATUS_USER VARCHAR(20),
PROGRAM_NAME VARCHAR(255),
RECEIVE VARCHAR(255),
SEND VARCHAR(255),
elig_type varchar(20),
PROGRAM_ID BIGINT
);
我在一个存储过程里面有这样一个子临时表,往里面放了很多东东,现在要子查询出来,如何实现
我想执行这样一条SQL:
SELECT * FROM TEMP_RESULT WHERE COUNT_USER NOT IN (SELECT COUNT_USER FROM
TEMP_RESULT WHERE elig_type='exclude') 但是这样的话回提示,temp_rsult can not reopen
问题补充:
DROP TABLE IF EXISTS TEMP_RESULT_Copy ;
CREATE TEMPORARY TABLE TEMP_RESULT (
#CREATE TABLE PROSPERITI.TEMP_RESULT(
COUNT_USER BIGINT,
STATUS_USER VARCHAR(20),
PROGRAM_NAME VARCHAR(255),
RECEIVE VARCHAR(255),
SEND VARCHAR(255),
elig_type varchar(20),
PROGRAM_ID BIGINT
);
我在一个存储过程里面有这样一个子临时表,往里面放了很多东东,现在要子查询出来,如何实现
<strong>问题补充:</strong>
DROP TABLE IF EXISTS TEMP_RESULT_Copy ;
CREATE TEMPORARY TABLE TEMP_RESULT (
#CREATE TABLE PROSPERITI.TEMP_RESULT(
COUNT_USER BIGINT,
STATUS_USER VARCHAR(20),
PROGRAM_NAME VARCHAR(255),
RECEIVE VARCHAR(255),
SEND VARCHAR(255),
elig_type varchar(20),
PROGRAM_ID BIGINT
);
我在一个存储过程里面有这样一个子临时表,往里面放了很多东东,现在要子查询出来,如何实现
我想执行这样一条SQL:
SELECT * FROM TEMP_RESULT tr_01 WHERE tr_01.COUNT_USER NOT IN (SELECT COUNT_USER FROM
TEMP_RESULT tr_02 WHERE tr_02.elig_type='exclude') 但是这样的话回提示,tr_01 can not reopen2008年11月14日 17:37
6个答案 按时间排序 按投票排序
-
采纳的答案
根据mysql 5.0文档
A.7.3. TEMPORARY TABLE Problems
The following list indicates limitations on the use of TEMPORARY tables:
A TEMPORARY table can only be of type HEAP, ISAM, MyISAM, MERGE, or InnoDB.
You cannot refer to a TEMPORARY table more than once in the same query. For example, the following does not work:
mysql> SELECT * FROM temp_table, temp_table AS t2;
ERROR 1137: Can't reopen table: 'temp_table'
你这个操作是不可以,而且临时表没有索引,速度也会慢,建议你将这个临时表改为一个真实表,用来存放中间结果。也就是在数据库上真实建立一个temp_xxxx_xxx的表。如果需要临时表的隔离机制,建议你create临时表时就分为两个,创建两个临时表,一个放所有数据,另一个放exclude的数据。
2008年11月17日 13:27
-
你这句:
SELECT * FROM TEMP_RESULT WHERE COUNT_USER NOT IN (SELECT COUNT_USER FROM TEMP_RESULT WHERE elig_type='exclude')
跟这句:SELECT * FROM TEMP_RESULT WHERE elig_type <> 'exclude'
有区别吗??2008年11月17日 13:23
-
引用
SELECT * FROM TEMP_RESULT WHERE COUNT_USER NOT IN (SELECT COUNT_USER FROM
TEMP_RESULT WHERE elig_type='exclude')
使用别名试试:
这样:SELECT tr.* FROM TEMP_RESULT as tr WHERE tr.COUNT_USER NOT IN (SELECT tr1.COUNT_USER FROM TEMP_RESULT as tr1 WHERE tr1.elig_type='exclude')
2008年11月17日 07:29
-
引用DROP TABLE IF EXISTS TEMP_RESULT_Copy ;
CREATE TEMPORARY TABLE TEMP_RESULT (
#CREATE TABLE PROSPERITI.TEMP_RESULT(
COUNT_USER BIGINT,
STATUS_USER VARCHAR(20),
PROGRAM_NAME VARCHAR(255),
RECEIVE VARCHAR(255),
SEND VARCHAR(255),
elig_type varchar(20),
PROGRAM_ID BIGINT
);
我在一个存储过程里面有这样一个子临时表,往里面放了很多东东,现在要子查询出来,如何实现
你想知道子查询的方法呢,还是想知道临时表是不是可以在数据库连接未断开时,能不能做为数据表作用???
1、子查询语句:引用
例:
SELECT *
FROM TEMP_RESULT
WHERE COUNT_USER> (SELECT COUNT_USER FROM TEMP_RESULT
WHERE PROGRAM_NAME='Screw');
2、想知道临时表是不是可以在数据库连接未断开时,能不能做为数据表作用???引用临时表将在你连接MySQL期间存在。当你断开时,MySQL将自动删除表并释放所用的空间。所以在数据库处在连接状态,你可以将TEMP_RESULT表当正常的数据使用。2008年11月14日 18:38
-
引用临时表将在你连接MySQL期间存在。当你断开时,MySQL将自动删除表并释放所用的空间。当然你可以在仍然连接的时候删除表并释放空间。
临时表在你与mysql的链接没有断开前应该一直存在吧,临时表只是创建的时候加了个TEMPORARY,用起来跟普通的表一样的,你就认为你数据库中有这个表,直接用SQL查询不行吗?2008年11月14日 17:45
相关推荐
为了提高查询性能,应考虑子查询的优化策略,如使用EXISTS代替IN,或者将大子查询转换为临时表。例如,使用EXISTS找到销售过至少一件商品的客户: ```sql SELECT customer_name FROM customers WHERE EXISTS ...
### MySQL 临时表空间优化:提升数据库性能的关键 #### MySQL 特点概述 MySQL 是一个广泛使用的开源关系型数据库管理系统(RDBMS),基于 SQL 语言。它作为 LAMP 技术栈的一部分,在构建动态网站和 Web 应用程序...
MySQL数据库在处理复杂查询时,有时会利用内部的临时表和派生表来优化操作,这两者都是在处理数据时创建的临时数据结构,但它们的用途和生命周期有所不同。 临时表,顾名思义,是一种在用户会话期间创建并使用的表...
优化子查询可以通过使用JOIN操作、临时表或者将子查询结果缓存到变量中来提高效率。如果子查询结果不会改变,可以考虑使用存储过程或视图来预先计算并存储结果。 5. **子查询与联接**: 在某些情况下,子查询可以...
2. 子查询(DERIVED TABLE):当子查询的结果需要存储以便进一步处理时,MySQL可能会创建内部临时表。在MySQL 5.7中,可以通过`optimizer_switch='derived_merge=off'`禁用子查询的合并,从而避免内部临时表的使用。...
8. **子查询或semi-join操作**:在执行这类操作时,MySQL可能会创建临时表来存储中间结果。 **何时创建磁盘临时表:** 1. **包含BLOB/TEXT列**:如果临时表需要存储这些大数据类型,将自动创建磁盘临时表。 2. **...
此外,还有多列子查询,它们返回多个列的结果,可在FROM子句中使用,提供了一种将子查询结果作为临时表使用的可能性。 本文档还提供了一些操作案例,例如使用scott_data.sql文件中的雇员信息表进行各种查询操作,如...
子查询常用来筛选满足特定条件的数据,或者在不知道如何联接两个表时提供临时结果集。 索引(Index)是数据库管理系统中的一个重要组成部分,用于快速查找记录。MySQL支持多种类型的索引,包括B-Tree、Hash、R-Tree...
2. **在FROM子句中**:子查询可以作为一个临时表,供主查询操作。这在处理复杂的多表关系时非常有用。例如,用子查询获取每个部门的最高薪水: ```sql SELECT department, MAX(salary) FROM (SELECT department, ...
2. 子查询(Subquery):子查询是在一个查询语句中嵌套另一个查询,用于获取临时结果,然后这个结果被外部查询使用。子查询可以出现在SELECT、FROM或WHERE子句中。 3. 联合查询(UNION):联合查询用于合并两个或更...
首先,创建一个临时表或者子查询,用当前员工的ID作为外键,然后与原表进行连接,逐级查找上级,直到顶层的管理者(manager_id为NULL)。 ```sql SELECT e1.employee_id, e1.name, e2.name as manager_name FROM...
- 子查询通常用于复杂逻辑或临时数据集的构建,可以作为过滤条件,也可以在联接查询中作为源。 4. **联接条件与ON子句**: - 在JOIN操作中,ON子句用于指定连接两个表的条件,这通常是基于两个表中某个字段的等值...
例如,如果我们有两条子查询,MySQL会创建一个内存临时表来存储这些子查询的结果。在这个例子中,一条子查询返回单一值1000,而另一条子查询从表`t1`中按`id`降序获取数据并限制返回2行。在执行过程中,MySQL会先将...
1. MySQL 联合查询:在题目中,我们看到了两种查询方法,一种是基于子查询的方法,另一种是使用 JOIN 的方法。在 SQL 中,联接查询(JOIN)是用于从两个或更多个表中检索数据的主要方式。例如,方法一通过嵌套子查询...
【大厂面试题】史上最详细的一线大厂Mysql面试题详解MySQL执行计划及...执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速 度会受到一定的影响,这里多了一个创建和销毁临时表的过程。
5. **考虑使用临时表**:对于复杂的子查询,可以先将结果存入临时表,然后再进行后续操作。 6. **使用LIMIT优化**:如果只需要满足条件的第一条记录,可以使用LIMIT 1来减少查询开销。 通过理解子查询的工作原理并...
子查询的基本概念是将一个SELECT语句的结果作为一个临时表(或称为内部表)来使用,这个临时表可以被外部的查询所引用。例如,假设我们有两张表,`article`和`user`,`article`表存储文章信息,`user`表存储用户信息...
如果在salesinfo表的CustomerID列上有索引,那么MySQL可以快速定位到匹配的行,而无需创建临时表,从而提高查询速度。 连接(JOIN)操作的优势在于它可以利用索引来优化查询,尤其是在连接字段上存在索引时。此外,...