我正在尝试根据SQL 2005中的条件结果填充临时表.临时表将具有相同的结构,但将根据条件使用不同的查询填充.下面的简化示例脚本在ELSE块的语法检查中失败,INSERT INTO错误为:
数据库中已经有一个名为"#MyTestTable"的对象.
DECLARE @Id int
SET @Id = 1
IF OBJECT_ID('tempdb..#MyTestTable') IS NOT NULL DROP TABLE #MyTestTable
IF (@Id = 2) BEGIN
SELECT 'ABC' AS Letters
INTO #MyTestTable;
END ELSE BEGIN
SELECT 'XYZ' AS Letters
INTO #MyTestTable;
END
Run Code Online (Sandbox Code Playgroud)
我可以在IF/ELSE语句之前创建临时表,然后只INSERT SELECT在条件块中执行语句,但是表会有很多列,我试图提高效率.这是唯一的选择吗?或者有一些方法可以使这项工作?
谢谢,马特
我正在尝试将值插入Oracle SQL中的"Employee"表.我有一个关于输入由外键确定的值的问题:
我的员工有3个由外键确定的属性:State,Position和Manager.我使用INSERT INTO语句插入值并手动键入数据.我是否需要在物理上查找每个引用以输入数据,或者是否有可以使用的命令?例如
INSERT INTO Employee
(emp_id, emp_name, emp_address, emp_state, emp_position, emp_manager)
VALUES
(001, "John Doe", "1 River Walk, Green Street", 3, 5, 1000)
Run Code Online (Sandbox Code Playgroud)
这应该填充employee表(John Doe, 1 River Walk, Green Street, New York, Sales Executive, Barry Green).纽约state_id=3在State桌子上; 销售主管position_id=5在positions谈判桌上; 和巴里格林manager_id=1000在manager桌子上.
有没有办法可以输入引用表的文本值,以便Oracle识别文本并将其与相关ID匹配?我希望这个问题有意义,很乐意澄清任何事情.
谢谢!
我正在尝试将查询结果存储在临时表中以供进一步处理.
create temporary table tmpTest
(
a FLOAT,
b FLOAT,
c FLOAT
)
engine = memory;
insert into tmpTest
(
select a,b,c from someTable
where ...
);
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,插入需要一分钟,而单独的子选择只需要几秒钟.为什么将数据写入临时表而不是将其打印到我的SQL管理工具的输出需要这么长时间?
更新 我的设置:MySQL 7.3.2集群,带有8个Debian Linux ndb数据节点1个SQL节点(Windows Server 2012)
我正在运行select on的表是一个ndb表.
我试图找出,如果执行计划在使用'insert into ..'时会有所不同,但它们看起来一样:(抱歉格式化,stackoverflow没有表格)
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY <subquery3> ALL \N \N \N \N \N \N 1 PRIMARY foo ref PRIMARY PRIMARY 3 <subquery3>.fooId 9747434 Using where 2 SUBQUERY someTable range PRIMARY PRIMARY 3 \N 136933000 …
在下表中输入值时,如何在SQL中对同一表的列强制执行外键约束:
员工:
我想运行一个INSERT INTO table SELECT... FROM...
问题是我插入的表有5列,而我选择的表只有4.第5列需要设置我做的默认值.我怎么能做到这一点?查询将是这样的(注意:这是Oracle):
INSERT INTO five_column_table
SELECT * FROM four_column_table
--and a 5th column with a default value--;
Run Code Online (Sandbox Code Playgroud) 没有经验的SQL,我希望有人可以帮助我.
我有一个空的临时表,以及一个包含信息的表.
我的查询概述如下:
CREATE TABLE [#Temp] (ID Int, Field1 Varchar)
INSERT INTO [#Temp]
SELECT ID, Field1
FROM [Other_table]
WHERE ID IN (ID1, ID2, ID3...)
Run Code Online (Sandbox Code Playgroud)
所以我将一大堆ID传递给查询,并且ID对应于ID Other_table,它必须使用此信息填充临时表.
是否可以在同一查询中保存与其他位置不匹配的ID(比如另一个临时表)?或者对于相同的临时表,在这种情况下只有Field1 = NULL?
我需要对未匹配的ID做额外的工作,所以我需要在某处随时访问它们.我希望在这一个查询中完成所有操作,如果这是最快的方法.
编辑:
谢谢你的帮助.
道歉,我现在看到我的问题并不完全清楚.
如果Other_table包含ID 1 - 1000,并且我传入ID 999,1000和1001,我希望临时表包含999和1000的信息,然后还有ID为1001且Field1 = NULL的条目.我不希望ID 1 - 998与Field1 = NULL一起返回.
我相信SELECT INTOSnowflake中有类似的语法,但我无法找到使用它的文档或示例.
CREATE TABLE raw_data (
Timestamp TIMESTAMP NOT NULL,
Date DATE NOT NULL,
UserID STRING,
Address STRING,
Phone STRING,
Value INTEGER
);
COPY INTO raw_data from 's3://my_bucket'
CREDENTIALS=(AWS_KEY_ID='XXXXX' AWS_SECRET_KEY='XXXX')
ON_ERROR=CONTINUE;
CREATE TABLE summary (
Date DATE NOT NULL,
UserID STRING,
Value INTEGER
);
INSERT INTO summary
SELECT Date, UserID, Value FROM raw_data
Run Code Online (Sandbox Code Playgroud)
上面的工作,但不是定义summary我想要的表,而是SELECT INTO让SQL解析器为我创建表.
我需要找到一种方法来做一个INSERT INTO table A但是其中一个值是来自表B上的查找,允许我说明.
我有以下两个表:
表A:
A1: String
A2: Integer value coming from table B
A3: More Data
Run Code Online (Sandbox Code Playgroud)
表B:
B1: String
B2: Integer Value
Run Code Online (Sandbox Code Playgroud)
A的示例行:{"Value",101,MoreData} B的示例行:{"English",101}
现在,我知道我需要将以下内容插入到A {"Value2","English",MoreData}中,但显然这是行不通的,因为它期望第二列中的Integer不是"English",所以我需要首先在表B中进行查找.
像这样的东西:
INSERT INTO tableA (A1, A2, A3)
VALUES ("Value2", SELECT B2 FROM tableB where B1="English", MoreData);
Run Code Online (Sandbox Code Playgroud)
显然这不起作用......
有什么建议?
我知道这不可能嵌套insert ... exec语句,但我仍然很感兴趣 - 有没有办法检查我是否已经处于活动状态insert ... exec以避免实际错误?
所以我想要这样的东西:
....
if <check if I have outer insert into exec> = 0
insert into <#some temporary table>
exec <stored procedure>
Run Code Online (Sandbox Code Playgroud)
换句话说 -insert ... exec是可选的,拥有它很好,但如果有人试图用外部调用我的过程,我想跳过它insert ... exec
我尝试使用pg_dump进行表数据转储,如下所示:
pg96\bin\pg_dump ... --format plain --section data --column-inserts --file obj.account.backup --table obj.account database_xyz
Run Code Online (Sandbox Code Playgroud)
而不是得到
INSERT INTO obj.account(name, email, password) VALUES ('user1','email1','password1');
INSERT INTO obj.account(name, email, password) VALUES ('user2','email2','password2');
Run Code Online (Sandbox Code Playgroud)
我想得到
INSERT INTO obj.account (name, email, password) VALUES
('user1','email1','password1'),
('user2','email2','password2');
Run Code Online (Sandbox Code Playgroud)
有没有没有任何非PostgreSQL后处理的方法吗?
insert-into ×10
sql ×8
oracle ×3
sql-server ×2
temp-tables ×2
backup ×1
foreign-keys ×1
mysql ×1
performance ×1
pg-dump ×1
postgresql ×1
select ×1