2014-09-15 3 views
0

Вот моя проблема,MySQL DELETE запрос с JOIN ошибку ...

Я должен создать запрос в mysql с присоединиться заявления ... мои таблицы базы данных выглядит следующим образом:

table 1: 
    contact, with contact_id, contact_value, contact_relation 
table 2 : 
    relation, with relation_id, relation_one, relation_two 

Я должен удалить из контакта, где контакт имеет отношение значение (отношение id) И все эти отношения, но ТОЛЬКО, где мое отношение_one равно предопределенному значению ...

так что фактическая идея у меня есть:

DELETE FROM 'relation' INNER JOIN contact ON contact.contact_relation = relation.relation_id WHERE relation_one = MyValue 

Но это не делает то, что я имею в виду ...

Я стараюсь это так в моем mysql:

DELETE relation.* FROM `relation` INNER JOIN `contact` ON `contact`.`contact_relation`=`relation`.`relation_id` WHERE `relation_one` = 48 

Я предполагаю, что это может выглядеть как глупый вопрос ... даже «уже ответил один», НО я просмотрел стек, нашел похожий, но не решил мою проблему, потому что, когда я применяю этот запрос, он удаляет ВСЕ отношения WHERE relation_one = 48, НЕ ТОЛЬКО те, которые мне нужны ... (я имею в виду те, которые ссылаются на контактную таблицу под контакт-зависимостью (которая является идентификатором отношений Я МОГУ удалить, если эти отношения имеют relation_one, установленный только в 48!)

Я имею в виду: у меня может быть 100 записей в таблице отношений, где relation_one IS 48 ... но я только хочу удалить эти «отношения», relation_id = contact_relation ... мой contact.contact_relation в большинстве случаев null ... но иногда, для 2/100 это существующий relation_id там написано ... эти отношения я «возможно, придется» удалить ...

+0

это может помочь проиллюстрировать это [SQL Fiddle] (http://sqlfiddle.com) –

+0

возможный дубликат [Удаление строки s с MySQL LEFT JOIN] (http://stackoverflow.com/questions/2763206/deleting-rows-with-mysql-left-join) –

ответ

1

Когда вы удаляете использование левого соединения, укажите таблицу для удаления, а не столбцы:

DELETE `relation` FROM `relation` 
    INNER JOIN `contact` ON `contact`.`contact_relation`=`relation`.`relation_id` 
    WHERE `relation_one` = 48 
0

Если я правильно понимаю, вы хотите удалить все записи отношений с отношением_one = 48 и их id в contact.contact_relation. Это было бы просто:

delete from relation 
where relation_one = 48 
and relation_id in (select contact_relation from contact); 
0

на основе вашего вопроса и выборки запросов я предполагаю, что вы пытаетесь удалить связанные данные из соотношения таблицы, которая связана с контактной таблицей и имеющее значением relation_one 48 это может быть сделано как:

DELETE FROM `relation`, `contact` USING `relation` INNER JOIN `contact` 
WHERE `relation`.`relation_id`=`contact`.`contact_relation` AND `relation_one`=48; 

более нескольких см Таблица Удаляет по следующему адресу: http://dev.mysql.com/doc/refman/5.6/en/delete.html

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