簡體   English   中英

通過插入另一個表中的外鍵計數來更新表

[英]Update a table by inserting a count of foreign key from another table

我有兩個表:

    ╔════════════════╗    ╔════════════════╗
    ║ ITEM           ║    ║ ITEM_TRACK     ║
    ╠════════════════╣    ╠════════════════╣
    ║ ID             ║    ║ ID             ║
    ║ GUID           ║    ║ ITEM_GUID      ║
    ║ COUNT1         ║    ║ CONTEXT        ║
    ║ ENDDATE        ║    ║                ║
    ╚════════════════╝    ╚════════════════╝

╔═════╦══════╦════════╗   ╔═════╦═══════════╦══════════╗
║ ID  ║ GUID ║ COUNT1 ║   ║ ID  ║ ITEM_GUID ║ CONTEXT  ║
╠═════╬══════╬════════╣   ╠═════╬═══════════╬══════════╣
║ 1   ║  aaa ║        ║   ║ 1   ║    abc    ║   ITEM   ║
║ 2   ║  bbb ║        ║   ║ 2   ║    aaa    ║   PAGE   ║
║ 3   ║  ccc ║        ║   ║ 3   ║    bbb    ║   ITEM   ║
║ 4   ║  abc ║        ║   ║ 4   ║    ccc    ║   ITEM   ║
╚═════╩══════╩════════╝   ║ 5   ║    abc    ║   ITEM   ║
                          ║ 6   ║    aaa    ║   ITEM   ║
                          ║ 7   ║    abc    ║   ITEM   ║
                          ║ 8   ║    ccc    ║   PAGE   ║
                          ╚═════╩═══════════╩══════════╝

我想做的是在ITEM的COUNT1列中填寫ITEM_GUID在將來仍在ENDDATE的所有ITEM.GUID中出現在ITEM_TRACK中的次數。 我需要每小時對ITEM中的所有GUIDS執行一次。

我可以輕松獲得所需的計數

SELECT ITEM_GUID, COUNT(*) from ITEM_TRACK GROUP BY ITEM_GUID;

我不知道該怎么辦,如何將其與INSERT INTO語句合並,以自動根據其ENDDATE的計數更新項目表中的所有項目?

更新:我有一個基於Aquillo答案的有效解決方案:

UPDATE ITEM a
SET COUNT1 = (SELECT COUNT(*) AS total FROM ITEM_TRACK b WHERE b.item_guid=a.guid);

沒有子查詢還有其他方法嗎?

您可以從這樣的選擇中插入:

INSERT INTO myTable (foreignKey, countColumn) VALUES 
    SELECT ITEM_GUID, COUNT(*) from ITEM_TRACK GROUP BY ITEM_GUID;

如果要更新,請嘗試以下操作:

使用SQL Server從SELECT更新

如果您使用INSERT INTO,則會在ITEM表中放置其他行,而不更新現有行。 如果這是您的意思,那很好,但是如果您想更新現有的,則需要使用update。 為此,您可以將要更新的表與要更新的表連接在一起。 但是,在您的情況下,您想從聚合中進行更新,因此您需要創建一個具有聚合值的表。 嘗試這個:

UPDATE ITEM SET Count1 = temp.total
FROM Item
INNER JOIN (
    SELECT ITEM_GUID, COUNT(*) AS total
    FROM ITEM_TRACK
    GROUP BY ID) AS temp
ON Item.GUID = temp.ITEM_GUID
WHERE ENDDATE > NOW()

我已經在SQL Server(使用GETDATE()而不是NOW())上進行了仔細檢查,並且可以正常工作,我認為它應該可以在MYSQL上工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM