UNION查询更新表

时间:2016-06-02 13:17:48

标签: ms-access union

这是我的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,但没有成功

1 个答案:

答案 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];