迁移数据并删除它们

时间:2016-05-18 18:52:08

标签: mysql sql sql-server oracle plsql

我正在研究Oracle数据库。那里有一个名为USR_INFO的表。

它有很多列,如

  1. USR_ID
  2. USR_NAME
  3. USR_TYPE
  4. USR_PW
  5. 以及.........

    现在我想创建一个名为USR_SUPER的新表,并将USR_INFO中的一些数据复制到其中。

    复制的条件是,如果USR_TYPE等于" S",则复制相应的 USR_ID和USR_PW到新表名为USR_SUPER。

    所以其中涉及3个步骤。

    1. 创建名为USR_SUPER的表。
    2. 如果USR_TYPE ==" S",则将数据从USR_INFO表移至USR_SUPER表列USR_S_ID& USR_S_PW。
    3. 从USR_INFO表中删除所有移动的数据。
    4. 我是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";
      

      //如何删除已移动的数据?

2 个答案:

答案 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