如何存储中间数据并在SQL查询之间共享?

时间:2011-07-06 20:29:33

标签: sql

假设我有四个表(A,B,C,D),empId是常见的。

运行一些复杂查询后,我会获得符合条件的empIds列表。

现在我需要运行Select .... from ..... where empId IN LIST

我想将此empIds列表存储在某个变量中,这样我每次都无法运行复杂查询来获取empIds列表。

无论如何将empIds存放在某个临时空间?

这样我每次都可以减少运行这个复杂的查询。

2 个答案:

答案 0 :(得分:2)

您可以使用以下语法在内存中创建表:

Select field1,field2,...fieldN INTO #tmp FROM SourceTable

现在您可以访问表#tmp的内容。

答案 1 :(得分:1)

由于数据库针对联接进行了优化,因此您应该将昂贵的empIds存储在表或视图中,然后加入到该文件中。

  1. 创建表格
  2. 将ID插入该表
  3. 免费加入临时表(或便宜)
  4. 由于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;
    
相关问题