2013-08-06 5 views
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 во всех трех таблицах, но он не работает, если игра идентификатор только в tb_games таблице. Как я могу удалить эту проблему? Или мне нужно написать три разных запроса для удаления из всех трех таблиц?

+0

проверки этого: http://stackoverflow.com/questions/13978452/delete-query-with-inner -join-not-working? rq = 1 –

+2

Я думаю, что использовать левое соединение – harsh4u

+0

да левое соединение будет выполнять работу –

ответ

0

Вы можете устранить необходимость сделать это в DML, создав столбцы game_id в внешних ключах tb_game_over и tb_game_round_record, которые указывают на tb_games.game_id и включают предложение 'on delete cascade'. Тогда ваше ВЕЬЕТЕ будет выглядеть так же, как это:

delete from tb_games where game_id=? 
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 
); 
Смежные вопросы