只是想知道如何创建一个临时表,然后从脚本中进一步选择它。
实施例。
CREATE TEMPORARY TABLE TEMP_TABLE1 AS
Select
L.ID,
SUM(L.cost)/2 as Costs,
from Table1 L
JOIN Table2 C on L.ID = C.ID
Where C.name = 'mike'
Group by L.ID
Select
Count(L.ID)
from Table1 L
JOIN TEMP_TABLE1 TT1 on L.ID = TT1.ID;
Where L.ID not in (TT1)
And Sum(L.Cost) > TT1.Costs
理想情况下,我想要一个临时表,然后在脚本中使用它来引用。
任何帮助都会很棒!
答案 0 :(得分:5)
只有当表格是唯一的表名时,您才会将表格称为 temp.<table>
或 <table>
后者。
按照: -
如果指定了模式名称,则它必须是“main”,“temp”或 附加数据库的名称。在这种情况下,新表是 在指定的数据库中创建。如果是“TEMP”或“TEMPORARY”关键字 在“CREATE”和“TABLE”之间发生,然后创建新表 在临时数据库中。指定模式名称和。是错误的 TEMP或TEMPORARY关键字,除非schema-name是“temp”。如果不 指定了模式名称,然后TEMP关键字不存在 table在主数据库中创建。
SQL As Understood By SQLite - CREATE TABLE
以下示例创建3个表: -
: -
DROP TABLE IF EXISTS temp.table1;
DROP TABLE IF EXISTS table1;
DROP TABLE IF EXISTS temp_table;
CREATE TABLE table1 (columnA INTEGER,columnB INTEGER, columnC INTEGER);
: -
INSERT INTO table1 (columnA,columnB,columnC) VALUES
(1,5,20),
(2,7,21),
(3,8,80),
(4,3,63);
CREATE TEMP TABLE table1 AS select * from table1;;
CREATE TEMPORARY TABLE temp_table AS SELECT * FROM table1;
temp.
,只是表名。 : -
SELECT 'temp_table' AS from_table,* FROM temp_table
UNION ALL
SELECT 'temp.table1' as from_table,* FROM temp.table1;
结果是: -
CREATE TEMPORARY TABLE TEMP_TABLE1 AS Select L.ID, SUM(L.cost)/2 as Costs, from Table1 L JOIN Table2 C on L.ID = C.ID Where C.name = 'mike' Group by L.ID Select Count(L.ID) from Table1 L JOIN TEMP_TABLE1 TT1 on L.ID = TT1.ID; Where L.ID not in (TT1) And Sum(L.Cost) > TT1.Costs
此示例中存在一些问题,即滥用聚合(注释掉)以下工作。
_
。: -
DROP TABLE IF EXISTS Table_1;
DROP TABLE IF EXISTS Table_2;
DROP TABLE If EXISTS temp.temp_table1;
CREATE TABLE Table_1 (ID INTEGER PRIMARY KEY, cost REAL);
CREATE TABLE Table_2 (ID INTEGER PRIMARY KEY, name TEXT);
INSERT INTO Table_1 (cost) VALUES (100.45),(56.78),(99.99);
INSERT INTO Table_2 (name) VALUES ('mike'),('mike'),('fred');
CREATE TEMP TABLE temp_table1 AS
SELECT L.ID,
sum(L.cost)/2 as Costs
FROM Table_1 L
JOIN Table_2 C ON L.ID = C.ID
WHERE C.name = 'mike'
GROUP BY L.ID;
SELECT
count(L.ID)
FROM Table_1 L
JOIN temp_table1 TT1 ON L.ID = TT1.[L.ID]
WHERE
L.ID NOT IN (TT1.[L.ID])
-- AND Sum(L.cost) > TT1.costs --<<<< misuse of aggregate
问题基于列名称 L.ID
,因此必须附上(此处的规则SQL As Understood By SQLite - SQLite Keywords适用) [
上面已经使用了strong>和 ]
。
AS
e..g SELECT
L.ID AS lid, --<<<< AS lid ADDED
SUM(L.cost)/2 as Costs, ,.......
添加以下内容可能适合绕过滥用聚合: -
GROUP BY L.ID
HAVING sum(L.cost) > TT1.costs
将以下内容添加到脚本的末尾: -
SELECT
count(L.ID), *
FROM Table_1 L
JOIN temp_table1 TT1 ON L.ID = TT1.[L.ID];
导致: -