[英]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_id
, e_id
, ts
, data1
, data2
, data3
)中获取行到临时表(由p_id
, e_id
, ts
索引),然后从该临时表中选择特定的行结果是。 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.