我有一个总共有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”但我不确定这是否正确。谢谢。
答案 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;