抱歉,我错过了,并且再次删除了之前的事故问题。
我有一种情况,我试图从表1中选择不同的新值并将它们存储在表2中。问题是表在列“name”上有重复但是它确实有一个键列“id” ,但不同的ID当然会映射到同一个名称。
我对查询的想法是
INSERT INTO TABLE2
(NAME, UniqueID)
SELECT DISTINCT TABLE1.NAME, TABLE1.ID
FROM TABLE1
LEFT JOIN TABLE2 ON TABLE1.ID=TABLE2.UniqueID
WHERE TABLE2.NAME IS NULL
需要帮助才能让查询返回我想要的结果,现在它仍然会在table2(名称列)中生成重复项,这是我不想要的。我希望它只附加新记录,即使我多次运行查询。例如,如果将两个新记录添加到table1中,但其中一个名称已经在表2中,那么查询只会向table2添加1个新记录
只是一个注释:我正在使用ms访问,因此它对单个查询具有严格的语法
修改
Folliwing输入我带来了这个查询
INSERT INTO TABLE2
(NAME, UniqueID)
SELECT TABLE1.NAME, Min(TABLE1.ID)
FROM TABLE1
LEFT JOIN TABLE2 ON TABLE1.NAME=TABLE2.NAME
WHERE TABLE2.UniqueID IS NULL
Group By TABLE1.NAME;
但是这些实际上必须分成两个独立的wueries,在没有reserver错误标志的情况下运行,但现在我遇到了另外一个问题。当我运行两个单独的查询时,它第一次运行正常,但是当我运行它两次尝试测试以查看是否有任何新记录已添加到表1时,它会在表1中没有新记录时附加1条记录,因此它会附加一个空白的名称值和一个重复的唯一ID,并且每次运行它时都会不断地执行相同的过程。
答案 0 :(得分:1)
INSERT INTO TABLE2 (UniqueID, NAME)
SELECT min(t1.ID) as UniqueID, t1.NAME
FROM TABLE1 t1
LEFT JOIN TABLE2 t2 ON t1.ID=t2.UniqueID
WHERE t2.NAME IS NULL
group by t1.NAME
答案 1 :(得分:1)
由于您同时提取了名称和ID,因此distinct关键字只会提取不同的组合。具有相同名称和不同ID的两个记录仍然有效。
如果两个名称具有不同的ID,您希望插入哪个?...
insert into table2 (Name, UniqueID)
select t1.Name, MIN(t1.ID)
from table1 t1
left join table2 t2 on t1.ID = t2.UniqueID
where t2.Name is null
group by t1.Name
在回复评论时,我意识到名称字段应该加入,以防止已经存在的欺骗。
insert into table2 (Name, UniqueID)
select t1.Name, MIN(t1.ID)
from table1 t1
left join table2 t2 on t1.Name = t2.Name
where t2.UniqueID is null
group by t1.Name