2015-03-26 2 views
0

нужно удалить строки из таблицы «old_battles», если он существует в таблице «сражения» с условием:MySQL: удалить строку, если существует в другой таблице с условием

удалить строку из «old_battles», если она существует в 'боях' и 'old_battles.status = "готовой"'

примечание: old_battles.id = battles.id

таблицы структура: бои:

id  status 
1  finished 
2  cancelled 
3  on progress 
4  finished 
5  finished 

old_battles:

id  status 
1  finished 
2  cancelled 
3  on progress 
4  finished 
5  finished 

мой запрос:

delete from old_battles 
where old_battles.id in 

(
select ob2.id 
from old_battles ob2,battles b 
where ob2.id = b.id 
and ob2.status = 'finished' 
) 

ответ

3

Рассмотрим следующий

mysql> create table battles (id int, status varchar(100)); 
Query OK, 0 rows affected (0.09 sec) 

mysql> insert into battles values 
    -> (1,'finished'), 
    -> (2,'cancelled'), 
    -> (3,'on progress'), 
    -> (4,'finished'), 
    -> (5,'finished'); 
Query OK, 5 rows affected (0.03 sec) 
Records: 5 Duplicates: 0 Warnings: 0 

mysql> create table old_battles like battles; 
Query OK, 0 rows affected (0.11 sec) 

mysql> insert into old_battles values 
    -> (1,'finished'), 
    -> (2,'cancelled'), 
    -> (3,'on progress'), 
    -> (4,'finished'), 
    -> (5,'finished'); 
Query OK, 5 rows affected (0.03 sec) 
Records: 5 Duplicates: 0 Warnings: 0 

Ниже приводится запрос для удаления

delete ob from old_battles ob 
join battles b on b.id = ob.id where ob.status = 'finished'; 


mysql> select * from old_battles ; 
+------+-------------+ 
| id | status  | 
+------+-------------+ 
| 2 | cancelled | 
| 3 | on progress | 
+------+-------------+ 
2 rows in set (0.00 sec) 
Смежные вопросы