2016-10-20 3 views
0

Я хотел бы знать, как я могу выбрать/обновить/удалить в таблице n: n. Мой стол:MySQL - от n до n table - как правильно выбрать?

id_rel | option 
---------------- 
1  | 1 
2  | 2 
2  | 1 
3  | 1 
4  | 1 
4  | 2 
5  | 1 
6  | 2 

А теперь я хочу, чтобы проверить некоторые id_rel есть вариант 1 и 2 - если это правда, то удалить строку с параметром 2.

Желаемый эффект:

id_rel | option 
---------------- 
1  | 1 
2  | 1 
3  | 1 
4  | 1 
5  | 1 
6  | 2 

Как могу ли я это сделать?

+0

Что вы пробовали? Можете ли вы хотя бы написать запрос для определения строк, которые необходимо удалить? – CGritton

ответ

0

Попробуйте это:

DELETE FROM mytable 
WHERE `option` = 2 AND id_rel IN 
(
    SELECT id_rel 
    FROM (SELECT id_rel 
     FROM mytable 
     GROUP BY id_rel 
     HAVING SUM(`option`=1) > 0 AND SUM(`option`=2) > 0) AS t 
); 

подзапрос:

SELECT id_rel 
FROM mytable 
GROUP BY id_rel 
HAVING SUM(`option`=1) > 0 AND SUM(`option`=2) > 0 

используется для идентификации id_rel значения имеющие отношение к обоим 1 и 2 вариантов. Этот подзапрос должен быть помещен в другой подзапрос, потому что в противном случае MySQL выдает ошибку:

Error Code: 1093. You can't specify target table 'mytable' for update in FROM clause

Смежные вопросы