2

我正在从多个表中删除与游戏 ID 对应的游戏。

这是我正在使用的查询

$sql = DELETE `tb_games`, `tb_game_over`, `tb_game_round_record` FROM `tb_games`";
$sql .= " INNER JOIN `tb_game_over` ON `tb_games`.`game_id` = `tb_game_over`.`game_id`";
$sql .= " INNER JOIN `tb_game_round_record` ON `tb_games`.`game_id` = `tb_game_round_record`.`game_id`";
$sql .= " WHERE `tb_games`.`game_id` = ?";

如果 game_id 在所有三个表中,则此查询有效,但如果游戏 id 仅在 tb_games 表中,则此查询无效。我怎样才能消除这个问题?或者我是否需要编写三个不同的查询来从所有三个表中删除?

4

2 回答 2

0

您可以通过在 tb_game_over 和 tb_game_round_record 外键中创建指向 tb_games.game_id 并包含“on delete cascade”子句的 game_id 列来消除在 DML 中执行此操作的需要。然后您的删除语句将如下所示:

delete from tb_games where game_id=?
于 2013-08-06T05:24:02.837 回答
0

只是你可以做

DELETE FROM tb_games WHERE game_id IN (
SELECT game_id FROM tb_game_over
UNION ALL
SELECT game_id FROM tb_game_round_record
);
于 2013-08-06T05:41:45.753 回答