将数据从 table 插入临时 table,然后从临时 table 特定行插入 select
Insert data from a table to a temporary table, and then select from the temp table specific rows
我正在尝试从现有 table 中获取行(按列:p_id
、e_id
、ts
、data1
、data2
, data3
) 到一个临时 table(由 p_id
, e_id
, ts
索引),然后从那个临时 table 结果。然后终止临时 table(因为这就是 CREATE TEMPORARY 所做的,对吧?)
我查看了这 2 个帖子:
- How to combine data into a temporary table in Mysql
- Create a temporary table in a SELECT statement without a separate CREATE TABLE
并且对正确编写查询感到困惑(我的查询没有 运行)。
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;
看来你只需要删除第一组 (),并在语句之间添加一个分号。
如果您不打算以后使用它,为什么需要临时 table?
下一个不行吗?
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';
如有遗漏请指正
您可以使用下面的查询,它会在 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;
不需要删除pet_temptable,它会自动删除一个会话关闭。
我正在尝试从现有 table 中获取行(按列:p_id
、e_id
、ts
、data1
、data2
, data3
) 到一个临时 table(由 p_id
, e_id
, ts
索引),然后从那个临时 table 结果。然后终止临时 table(因为这就是 CREATE TEMPORARY 所做的,对吧?)
我查看了这 2 个帖子:
- How to combine data into a temporary table in Mysql
- Create a temporary table in a SELECT statement without a separate CREATE TABLE
并且对正确编写查询感到困惑(我的查询没有 运行)。
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;
看来你只需要删除第一组 (),并在语句之间添加一个分号。
如果您不打算以后使用它,为什么需要临时 table?
下一个不行吗?
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';
如有遗漏请指正
您可以使用下面的查询,它会在 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;
不需要删除pet_temptable,它会自动删除一个会话关闭。