这是我的UNION查询
INSERT INTO Master (Player, Won, Lost)
SELECT Player, Sum(Won), Sum(Lost) FROM (
SELECT First([Master Data Results 2013 - 2016].[Winner]) AS Player,
Count([Master Data Results 2013 - 2016].[Winner]) AS Won,
0 AS Lost
FROM [Master Data Results 2013 - 2016]
GROUP BY [Master Data Results 2013 - 2016].[Winner]
HAVING (((Count([Master Data Results 2013 - 2016].[Winner])) > 1))
UNION
SELECT First([Master Data Results 2013 - 2016].[Loser]) AS Player,
0 as Won,
Count([Master Data Results 2013 - 2016].[Loser]) AS Lost
FROM [Master Data Results 2013 - 2016]
GROUP BY [Master Data Results 2013 - 2016].[Loser]
HAVING (((Count([Master Data Results 2013 - 2016].[Loser])) > 1))
)
GROUP BY Player
此查询执行我想要的所有内容,当然除了1件事。 当我的MASTER DATA RESULTS 2013 -2016中的记录更新了新记录并且我在上面运行我的查询时,我的MASTER表全部搞砸了。 查询只是再次添加所有具有新数字的玩家,而不是更新表格。
如何确保查询不是在MASTER表中添加行,而只是更新MASTER表中的Won和Lost字段?
我玩过独特的值和UPDATE,但没有成功
答案 0 :(得分:1)
您不能使用UNION或GROUP BY查询直接更新表,这样的查询不可更新。您可以在插入新行之前删除Master表中的所有行,或者如果Master表包含应按原样保留的信息,只需使用union查询中的player更新几行,将此查询中的数据插入临时表,然后通过查询使用已连接的主表和临时表来更新主表。
通过MasterTemp表中的数据更新主表的查询应如下所示:
UPDATE Master INNER JOIN MasterTemp ON Master.Player = MasterTemp.Player
SET Master.Won = [MasterTemp].[Won], Master.Lost = [MasterTemp].[Lost];