【问题标题】:Insert 2 select in same insert SQL在同一插入 SQL 中插入 2 选择
【发布时间】:2021-02-17 00:55:35
【问题描述】:

我有一个问题,我想使用 2 select 插入新表,但我不知道是否可以...

我的代码:

insert INTO attributs_libres_lignes VALUES  ( SELECT LIGN_PKID, "INSERT HERE" from ATTRIBUTS_LIGNES a, "HERE THE NUMBER OF COLUMN OF PKID (1 to 4)", "HERE A DATE");
select COLONNE01 from attributs_lignes
union all select COLONNE02 from attributs_lignes
union all select COLONNE03 from attributs_lignes
union all select COLONNE04 from attributs_lignes

我想在第一部分插入第二部分(选择 COLONNE01....),而不是“在此处插入”

数据旧表:第 1 列(“PKID1”、“一”、“二”、“三”) 第 2 列(“PKID2”、“一”、“二”、“三”)

新表:

(PKID1, 一, 1) (PKID2, 一, 1) (PKID1, 二, 2) (PKID2, 二, 2) (PKID1, 三, 3) (PKID2, 三, 3)

-

【问题讨论】:

  • insert into t2 (c1, c2) select ca, cb from ...

标签: sql oracle sql-insert unpivot lateral-join


【解决方案1】:

我会推荐 cross apply 取消透视。这比union 更有效,因为它只扫描表一次,而不是每个成员子查询一次。

所以:

insert into attributs_libres_lignes (lign_pkid, colonne)
select a.lign_pkid, v.colonne
from attributs_lignes a
cross apply (
    select a.colonne01 colonnefrom dual
    union all select a.colonne02 from dual
    union all select a.colonne03 from dual
    union all select a.colonne04 from dual
) v

请注意,枚举insert 语句的目标列是一种很好的做法。我假设目标表的列是lign_pkid 和colonne,您可能需要查看。

【讨论】:

    【解决方案2】:

    难道就这么简单吗?

    insert into attributs_libres_lignes
    select lign_pkid, colonne01 from attributs_lignes union all
    select lign_pkid, colonne02 from attributs_lignes union all
    select lign_pkid, colonne03 from attributs_lignes union all
    select lign_pkid, colonne04 from attributs_lignes;
    

    【讨论】:

    • 就是这样!但现在我想添加一个包含根据 PKID 的数字的新列,如果它是 PKID 1 的第一列,如果它是 PKID 1 的第二列,则放 2 等等
    • 但这不是从旧表中恢复,所以我被卡住了
    • 恐怕我不明白你的意思。请编辑您发布的问题并添加示例数据和所需结果。
    【解决方案3】:

    您可以按如下方式使用 CROSS JOIN:

    INSERT INTO ATTRIBUTS_LIBRES_LIGNES
    SELECT A.LIGN_PKID,
           C.COL_ATTRIBUTES
      FROM ATTRIBUTS_LIGNES A
     CROSS JOIN (
        SELECT COLONNE01 COL_ATTRIBUTES FROM ATTRIBUTS_LIGNES UNION ALL
        SELECT COLONNE02 FROM ATTRIBUTS_LIGNES UNION ALL
        SELECT COLONNE03 FROM ATTRIBUTS_LIGNES UNION ALL
        SELECT COLONNE04 FROM ATTRIBUTS_LIGNES
    ) C
    

    【讨论】:

      猜你喜欢
      • 2012-04-12
      • 2019-08-22
      • 1970-01-01
      • 1970-01-01
      • 2014-10-26
      • 2014-10-05
      • 1970-01-01
      • 2014-09-04
      • 2020-10-19
      相关资源
      最近更新 更多