mysql条件语句

时间:2017-10-24 07:36:36

标签: mysql sql database

我有两张桌子,阿里纳斯和音乐会。在竞技场内有ArenaID(主键)和容量。在Concerts中,每个ConcertID(主键)与ArenaID相关联。在音乐会上,我有四排。 ArenaID 1使用两次,ArenaID 2使用两次。

所以,我遇到麻烦的是我必须在Concerts表中有2场音乐会的ArenaID上更新容量(在表Arenas中)为50,000。

我可以简单地提出一个问题:如何使用不同表中的行内容更新一个表中行的内容?

就我而言,我写了一个像

这样的陈述
UPDATE Arenas SET Capacity = 50000 WHERE Concerts = 2;

但音乐会是不同表格的一栏,因此无法使用该信息。

感谢您提供的任何帮助:)

3 个答案:

答案 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).