简体   繁体   English

将数据从表插入到临时表,然后从临时表中选择特定行

[英]Insert data from a table to a temporary table, and then select from the temp table specific rows

I'm trying to get rows from an existing table (by columns: p_id , e_id , ts , data1 , data2 , data3 ) to a temporary table (indexed by p_id , e_id , ts ), and then selecting specific rows from that temporary table as a result. 我正在尝试从现有表(按列: p_ide_idtsdata1data2data3 )中获取行到临时表(由p_ide_idts索引),然后从该临时表中选择特定的行结果是。 Then terminate the temporary table (because that's what CREATE TEMPORARY does, right?) 然后终止临时表(因为这就是CREATE TEMPORARY的功能,对吧?)

I reviewed these 2 posts: 我查看了以下2个帖子:

and got all confused with getting the query written properly (my query doesn't run). 并把所有查询都与正确编写查询混淆了(我的查询没有运行)。

CREATE TEMPORARY TABLE IF NOT EXISTS 
  pet_temp ( INDEX(p_id, e_id, ts) )  
AS (
  SELECT p_id, e_id, ts, data1, data2, data3
  FROM processes_history
  WHERE e_id=4362 AND ts BETWEEN '2017-03-01' AND '2017-04-01'
) SELECT p_id, e_id, ts, data1, data2, data3 FROM pet_temp WHERE p_id IN (11,22,33,44,55,66,77,88,99);
CREATE TEMPORARY TABLE IF NOT EXISTS 
  pet_temp ( INDEX(p_id, e_id, ts) )  
AS (
  SELECT p_id, e_id, ts, data1, data2, data3
  FROM processes_history
  WHERE e_id=4362 AND ts BETWEEN '2017-03-01' AND '2017-04-01'
) ;
SELECT p_id, e_id, ts, data1, data2, data3 FROM pet_temp WHERE p_id IN (11,22,33,44,55,66,77,88,99);

Drop temporary table if exists pet_temp ;
CREATE TEMPORARY TABLE IF NOT EXISTS 
  pet_temp ( INDEX(p_id, e_id, ts) )  
AS 
  SELECT p_id, e_id, ts, data1, data2, data3
  FROM processes_history
  WHERE e_id=4362 AND ts BETWEEN '2017-03-01' AND '2017-04-01';

 SELECT p_id, e_id, ts, data1, data2, data3 FROM pet_temp WHERE p_id IN (11,22,33,44,55,66,77,88,99);
DROP TEMPORARY TABLE IF EXISTS pet_temp;

Looks like you just need to remove the first set of (), and add a semicolon between the statements. 看起来您只需要删除第一组(),并在语句之间添加分号即可。

You can use below query, it will give desire in table: 您可以使用下面的查询,它将在表中给出需求:

CREATE TEMPORARY TABLE IF NOT EXISTS pet_temp (INDEX(p_id, e_id, ts))
SELECT p_id, e_id, ts, data1, data2, data3
FROM (
    SELECT p_id, e_id, ts, data1, data2, data3 
    FROM processes_history   
    WHERE e_id=4362 AND ts BETWEEN '2017-03-01' AND '2017-04-01'
) x
WHERE p_id IN (11,22,33,44,55,66,77,88,99);
SELECT * FROM pet_temp;

Don't need to drop pet_temp table, it will get dropped automatically one session is closed. 不需要删除pet_temp表,它将在一个会话关闭时自动删除。

Why do you need the temporary table for if you're not planing on using it later? 如果您以后不打算使用临时表,为什么还要使用该临时表呢?

The next won't do the job? 下一个不会做这项工作吗?

SELECT p_id, e_id, ts, data1, data2, data3 FROM processes_history WHERE e_id=4362 AND p_id IN (11,22,33,44,55,66,77,88,99) AND ts BETWEEN '2017-03-01' AND '2017-04-01';

Please correct me if i'm missing something 如果我缺少某些东西,请指正我

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM