我有两张桌子,阿里纳斯和音乐会。在竞技场内有ArenaID(主键)和容量。在Concerts中,每个ConcertID(主键)与ArenaID相关联。在音乐会上,我有四排。 ArenaID 1使用两次,ArenaID 2使用两次。
所以,我遇到麻烦的是我必须在Concerts表中有2场音乐会的ArenaID上更新容量(在表Arenas中)为50,000。
我可以简单地提出一个问题:如何使用不同表中的行内容更新一个表中行的内容?
就我而言,我写了一个像
这样的陈述UPDATE Arenas SET Capacity = 50000 WHERE Concerts = 2;
但音乐会是不同表格的一栏,因此无法使用该信息。
感谢您提供的任何帮助:)
答案 0 :(得分:0)
UPDATE Arenas a JOIN Concerts c ON a.ArenaID = c.ArenaID
SET a.Capacity = 50000 WHERE c.Concerts = 2;
应该工作
作为最佳实践,我建议您探索MySQL中是否有任何选项,如Sql Server中的TRANSACTION
,您可以这样做:
-- Make a select with the same WHERE clause as the one you'll do your update on later
BEGIN TRANSACTION;
-- Update Query here
-- Make an select statement corresponding to the data you have changed
然后查看更新的位置是否正确,然后说明COMMIT TRANSACTION;
其他ROLLBACK TRANSACTION;
。
我多年没与MySQL合作,所以我不知道是否有这样的选择,但我认为这是可能的。
答案 1 :(得分:0)
使用简单的内连接更新第二个表中的记录:
UPDATE Arenas INNER JOIN Concerts ON Arenas.ArenaID = Concerts.ArenaID
SET Arenas.Capacity = 50000 WHERE Concerts.Concerts = 2;
如果对表名使用别名:
UPDATE Arenas A JOIN Concerts C ON A.ArenaID = C.ArenaID
SET A.Capacity = 50000 WHERE C.Concerts = 2;
答案 2 :(得分:-1)
您可以使用子查询来检索这样的ID:
UPDATE Arenas SET capacity = 50000 where id in (SELECT arena_id FROM Concerts GROUP BY arena_id HAVING COUNT(*) > 2).