【问题标题】:SQL create empty table and fill some rows with infoSQL 创建空表并用信息填充一些行
【发布时间】:2016-03-30 10:24:18
【问题描述】:

是否可以创建一个具有固定行数(数量在另一个表中定义)和定义列(col1 和 col2)的空表,然后用我得到的行替换这个空表中的一些行从一个选择?

我希望最终的结构是这样的:

col1        col2
----------------
empty       empty
val11       val21
val12       val22
empty       empty
val13       val23
empty       empty

我从另一个选择中获取 val11, val21....。我希望这个具有空值的表只是本地的,也就是不在其他任何地方创建它。

【问题讨论】:

  • Oracle(或任何其他主要 RDBMS)中没有内部行顺序,因此您不妨只插入所需的行,然后插入包含 null 的行。
  • 我通常在需要时使用逐级连接技巧来制作空行,这里是 10 行。选择 level 作为 id,null 作为 col1,null 作为 col2 from dual connect by level
  • 为什么首先需要空白行?
  • @Boneist 因为这就是我希望它们在 ZK 应用程序的列表框中显示在屏幕上的方式。

标签: sql oracle create-table


【解决方案1】:

您可以创建一个包含可变数量(例如 5)行的表,其中包含空字段; 关于排序,你不能使用任何内部排序,所以你需要添加一个字段来保存行的位置。 例如:

SQL> create table tab_5(id number, col1 varchar2(50), col2 varchar2(50))
  2  /

Table created.

SQL> insert into tab_5
  2  select level, null, null
  3  from dual
  4  connect by level <= 5
  5  /

5 rows created.


SQL> select * from tab_5 order by id;

        ID COL1                 COL2
---------- -------------------- --------------------
         1
         2
         3
         4
         5

如果你需要隔行更新一些记录,你可以依赖你的id

SQL> update tab_5
  2  set col1 = 'something',
  3      col2 = 'something else'
  4  where mod(id, 2) = 0;

2 rows updated.

SQL> select * from tab_5 order by id;

        ID COL1                 COL2
---------- -------------------- --------------------
         1
         2 something            something else
         3
         4 something            something else
         5

SQL>

【讨论】:

    【解决方案2】:

    我认为插入固定数量的空记录只是为了稍后“替换”它们没有任何意义。相反,一个更好的主意是只 INSERT 你想要的记录,然后添加一些空记录。

    首先INSERT另一个表中你想要的记录:

    INSERT INTO yourTable (col1, col2)
    SELECT col1, col2
    FROM anotherTable
    

    然后INSERT“空”记录:

    INSERT ALL
    INTO yourTable (col1, col2) VALUES (null, null)
    INTO yourTable (col1, col2) VALUES (null, null)
    INTO yourTable (col1, col2) VALUES (null, null)
    ...
    SELECT 1 FROM DUAL;
    

    【讨论】:

    • 我需要它们是交错的(空的和非空的),正如我所说,我需要一个固定的数字,比如说 27 行。但是,根据我从另一个表中获得的一些值,这个数字 27 可能会在后续调用中发生变化。我不是在寻找效率,我在寻找可以工作的东西。
    • 没有“交错”的概念,至少在 Oracle 数据库内部没有。如果您想要某个订单,请告诉我们该订单是什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    • 2018-12-01
    相关资源
    最近更新 更多