【问题标题】:SQLplus: how to insert only if one of the columns is uniqueSQLplus:仅当其中一列唯一时如何插入
【发布时间】:2016-01-28 04:14:43
【问题描述】:

我有一个总共有 10 列的表,我需要抓取其中的 6 列并将它们插入到我的新表中,但前提是其中一列是唯一的。

我明白:

INSERT INTO table_1(col1, col2, col3)
    SELECT DISTINCT colA, colB, colC
    FROM table_2;

将为我提供 A、B、C 的组合唯一的行,但我只想插入 A 唯一的位置以及该行其他列中关联的数据。我找到了 WHERE EXISTS 和 GROUP BY,但这些对我来说并不是很清楚。

我目前正在尝试...

INSERT INTO table_1 (col1, col2, col3)
    SELECT colA, colB, colC
    FROM table_2
    WHERE NOT EXISTS (SELECT cola FROM table_2);

...因为对我来说,如果 colA 在 table_2 中尚不存在,则将 colA、colB 和 colC 从 table_1 插入 table_2 但我不确定这是否正确。谢谢。

【问题讨论】:

  • A 的唯一性是什么意思。这些要求对我来说毫无意义。
  • 我同意@Hogan。我知道您想从 A 列插入唯一值,这可以通过 GROUP BY 轻松完成,但是您需要决定从其他列插入哪些值或对它们求和或其他内容。需要示例数据吗?

标签: sql oracle sql-insert


【解决方案1】:

如果“A 是唯一的”是指“A”中的给定值只有一个值,则可以使用此方法:

INSERT INTO table_1 (col1, col2, col3)
    SELECT colA, MAX(colB), MAX(colC)
    FROM table_2
    GROUP BY colA
    HAVING COUNT(*) = 1;

HAVING 子句查找“A”中仅出现一次的值。当只有一行时,MAX(colB) 和 MAX(colC)` 从该行返回值。

【讨论】:

    【解决方案2】:

    基于此要求:

    会给我 A、B、C 组合唯一的行,但我 只想在 A 唯一且关联的数据处插入 在该行的其他列中。

    我将您的需求解释为仅 A 列中的那些元素是单数的,然后是 B、C 列等中的所有元素......在同一行中找到。如果是这种情况,我会先使用Count 定义您的集合,然后使用子查询加入该集合。

    这是一种获取独特价值集的方法:

     SELECT colA, Count(colA) as ct
     GROUP BY ColA
     HAVING ct = 1;
    

    然后你就加入它:

    INSERT INTO table_1 (col1, col2, col3,...)
    SELECT colA, colB, colC,..
    FROM table_2    
    JOIN (--Here's your defined set
          SELECT colA, Count(colA) as ct
          GROUP BY ColA
          HAVING ct = 1) sub ON table_2.colA = sub.colA; 
    

    【讨论】:

      猜你喜欢
      • 2012-07-23
      • 1970-01-01
      • 1970-01-01
      • 2016-01-13
      • 2010-10-16
      • 1970-01-01
      • 2021-08-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多