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
);
我在一个存储过程里面有这样一个子临时表,往里面放了很多东东,现在要子查询出来,如何实现
[b]问题补充:[/b]
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
[b]问题补充:[/b]
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 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 reopen
根据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的数据。
[quote]临时表将在你连接MySQL期间存在。当你断开时,MySQL将自动删除表并释放所用的空间。当然你可以在仍然连接的时候删除表并释放空间。[/quote]
临时表在你与mysql的链接没有断开前应该一直存在吧,临时表只是创建的时候加了个TEMPORARY,用起来跟普通的表一样的,你就认为你数据库中有这个表,直接用SQL查询不行吗?
直接查就行了,只要连接没有断开,临时表就存在,跟普通表没有区别。
[quote]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
);
我在一个存储过程里面有这样一个子临时表,往里面放了很多东东,现在要子查询出来,如何实现[/quote]
你想知道子查询的方法呢,还是想知道临时表是不是可以在数据库连接未断开时,能不能做为数据表作用???
1、子查询语句:
[quote]
[color=darkblue]例:
SELECT *
FROM TEMP_RESULT
WHERE COUNT_USER> (SELECT COUNT_USER FROM TEMP_RESULT
WHERE PROGRAM_NAME='Screw');[/color][/quote]
2、想知道临时表是不是可以在数据库连接未断开时,能不能做为数据表作用???
[quote]临时表将在你连接MySQL期间存在。当你断开时,MySQL将自动删除表并释放所用的空间。所以在数据库处在连接状态,你可以将TEMP_RESULT表当正常的数据使用。[/quote]
[quote]
SELECT * FROM [color=red]TEMP_RESULT[/color] WHERE COUNT_USER NOT IN (SELECT COUNT_USER FROM
[color=red]TEMP_RESULT[/color] WHERE elig_type='exclude')
[/quote]
使用别名试试:
这样:
[code="java"]
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')
[/code]
你这句:
[code="java"]
SELECT * FROM TEMP_RESULT WHERE COUNT_USER NOT IN (SELECT COUNT_USER FROM
TEMP_RESULT WHERE elig_type='exclude')
[/code]
跟这句:
[code="java"]
SELECT * FROM TEMP_RESULT WHERE elig_type <> 'exclude'
[/code]
有区别吗??