我见过this,this,this,this和this,但我的问题不同了。
我有一个表1:
id c a b rc bid
1 12 4 6 35 4
2 12 4 6 67 7
3 12 4 6 88 8
4 23 4 7 49 3
5 23 5 8 59 8
Table2也有相同的列,但没有bid
列。
如果行具有相同的列c
,a
和b
值,则会将其视为重复行。因此,行1,2和3被认为是重复的,因为它们有12,4和6。
我想将Table1
行插入Table2
,但只插入那些不重复的行。 这意味着第1,2和3行不会插入Table2
。只插入第4行和第5行,因为它们没有重复项。
因此,插入后Table2将如下所示:
id c a b rc
1 23 4 7 49
2 23 5 8 59
我知道我可以使用此查询获取哪些行没有重复:
select distinct c,a,b,count(*) from Table1 group by c,a,b having count(*) > 1
但我无法弄清楚如何将这些插入Table2
,因为插入需要指定特定的列。
尝试过类似的东西,这显然不起作用:
insert into Table2 (c, a, b, rc) select distinct c,a,b,count(*) from Table1 group by c,a,b having count(*) > 1
答案 0 :(得分:2)
您也可以在子选择中使用
INSERT INTO Table2(c, a, b, rc, bid)
SELECT c, a, b, rc, bid
FROM Table1 t1
WHERE (c,a,b) not in ( SELECT c,a,b
FROM Table1 t2
GROUP BY c, a, b
HAVING COUNT(*) > 1
)
答案 1 :(得分:1)
您可以使用NOT EXISTS
排除重复的行:
INSERT INTO Table2(c, a, b, rc, bid)
SELECT
c, a, b, rc, bid
FROM Table1 t1
WHERE NOT EXISTS(
SELECT 1
FROM Table1 t2
WHERE
t2.c = t1.c
AND t2.a = t1.a
AND t2.b = t1.b
HAVING COUNT(*) > 1
)
HAVING COUNT(*) > 1
会检查是否有重复项。
答案 2 :(得分:1)
insert into table2 (c,a,b,rc)
select c,a,b,rc from table1
where id in (select distinct id
from Table1 group by c,a,b having count(*) = 1)
答案 3 :(得分:0)
有很多方法可以做到这一点。你已经有了这么多正确的答案。在这里,我根据您接近的方式提供查询。
INSERT INTO Table2 (c, a, b, rc)
SELECT
c,
a,
b,
rc
FROM
Table1
GROUP BY c, a, b
HAVING count(*) = 1;