SQLplus:如果其中一列是唯一的,如何插入

时间:2016-01-27 19:33:26

标签: sql oracle sql-insert

我有一个总共有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);

...对我来说,如果table_2中还没有colA,那么将“从表1中插入colA,colB和colC插入table_2”但我不确定这是否正确。谢谢。

2 个答案:

答案 0 :(得分:2)

如果" 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)`返回该行的值。

答案 1 :(得分:0)

基于此要求:

  

会给我一些行,其中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;