[英]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;
如果要更新,請嘗試以下操作:
如果您使用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.