MySQL DELETE запрос с ошибкой JOIN …

Вот моя проблема,

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

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

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

так что реальная идея у меня есть, это:

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

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

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

2

Решение

При удалении с помощью левого соединения укажите таблицу для удаления, а не столбцы:

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

Другие решения

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

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

1

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

delete from relation
where relation_one = 48
and relation_id in (select contact_relation from contact);
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector