假设我有四个表(A,B,C,D),empId
是常见的。
运行一些复杂查询后,我会获得符合条件的empIds
列表。
现在我需要运行Select .... from ..... where empId IN LIST
。
我想将此empIds
列表存储在某个变量中,这样我每次都无法运行复杂查询来获取empIds
列表。
无论如何将empIds
存放在某个临时空间?
这样我每次都可以减少运行这个复杂的查询。
答案 0 :(得分:2)
您可以使用以下语法在内存中创建表:
Select field1,field2,...fieldN INTO #tmp FROM SourceTable
现在您可以访问表#tmp的内容。
答案 1 :(得分:1)
由于数据库针对联接进行了优化,因此您应该将昂贵的empIds
存储在表或视图中,然后加入到该文件中。
由于MySQL据称是“世界上最受欢迎的开源数据库”,这里是他们文档中的语法:
第1步
http://dev.mysql.com/doc/refman/5.1/en/create-table.html
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
(create_definition,...)
[table_options]
[partition_options]
仅供教学使用的示例:
CREATE TABLE expensive_ids (id);
第2步
http://dev.mysql.com/doc/refman/5.1/en/insert-select.html
INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [(col_name,...)]
SELECT ...
[ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
仅供教学使用的示例:
INSERT INTO expensive_ids (id) VALUES (1);
第3步
http://dev.mysql.com/doc/refman/5.1/en/select.html
SELECT
[ALL | DISTINCT | DISTINCTROW ]
[HIGH_PRIORITY]
[STRAIGHT_JOIN]
[SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
[SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
select_expr [, select_expr ...]
[FROM table_references
仅供教学使用的示例:
SELECT my_other_table.id, expensive_ids.id
FROM my_other_table
LEFT JOIN expensive_ids
ON expensive_ids.id = my_other_table.id;