我正在研究Oracle数据库。那里有一个名为USR_INFO的表。
它有很多列,如
以及.........
现在我想创建一个名为USR_SUPER的新表,并将USR_INFO中的一些数据复制到其中。
复制的条件是,如果USR_TYPE等于" S",则复制相应的 USR_ID和USR_PW到新表名为USR_SUPER。
所以其中涉及3个步骤。
我是SQL的新手,并且不知道如何做到这一点。
可以为我提供执行这3个步骤的SQL吗?
这就是我到目前为止所做的:
// To create new table called USR_SUPER
CREATE TABLE USR_SUPER (USR_S_ID int, USR_S_PW varchar(50));
// To move data to new table if USR_TYPE == "S"
INSERT INTO USR_SUPER (USR_S_ID, USR_S_PW)
SELECT USR_ID, USR_PW
FROM USR_INFO
WHERE USR_TYPE="S";
//如何删除已移动的数据?
答案 0 :(得分:0)
您可以分两步完成,首先选择INTO新表中的记录(这会动态创建表)然后通过过滤新表中的所有USR_ID来删除USR_INFO表中的所有记录:
{
command: [
{ name: "edit" },
{
name: "update",
click: function (e) {
savedata();
},
},
{ name: "destroy" }
],
title: " ",
width: 140,
attributes: { style: "text-align: center; color:Blue" },
},
如果您确实需要新表上的密码列的另一个列名,则可以在选择新表中的记录时定义别名,如下所示:
SELECT USR_ID, USR_PW
INTO USR_SUPER
FROM USR_INFO
WHERE USR_TYPE="S";
DELETE FROM USR_INFO WHERE USR_ID IN (SELECT USR_ID FROM USR_SUPER)
<强>更新强>
在阅读了SELECT INTO on oracle databases后,我意识到在这个命令中,MS SQL存在一些差异。如果您有多个匹配的行,看起来您必须执行SELECT USR_ID 'USR_S_ID', USR_PW 'USR_S_PWD'
INTO USR_SUPER
FROM USR_INFO
WHERE USR_TYPE="S";
。所以它会变成:
BULK COLLECT INTO
希望对你有用。
答案 1 :(得分:0)
注意 :以下内容肯定适用于USR_SUPER
,可能需要对Oracle进行微小修改。但这个想法仍然是一样的。
你可以这样做:
第1步:创建名为CREATE TABLE usr_super(USR_S_ID INT, USR_S_PW INT)
的表。
USR_INFO
第2步:如果USR_TYPE
==&#34; S&#34;,则将数据从USR_SUPER
表格移至USR_S_ID
表格列{{1 }&amp; USR_S_PW
。
INSERT INTO usr_super (USR_S_ID, USR_S_PW) (SELECT inf.USR_ID,
inf.USR_PW
FROM usr_info inf
WHERE inf.USR_TYPE = 's')
第3步:从USR_INFO
表中删除所有已移动的数据。
DELETE FROM usr_info
WHERE usr_id IN (SELECT usr_s_id
FROM usr_super)
所以,基本上你的完整代码将是:
CREATE TABLE usr_super(USR_S_ID INT, USR_S_PW INT) //Step 1
INSERT INTO usr_super (USR_S_ID, USR_S_PW) (SELECT inf.USR_ID,
inf.USR_PW
FROM usr_info inf
WHERE inf.USR_TYPE = 's') //Step 2
DELETE FROM usr_info
WHERE usr_id IN (SELECT usr_s_id
FROM usr_super) //Step 3