Вот моя проблема,
Я должен построить запрос в 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
там написано … это те отношения, которые мне, «возможно, придется» удалить …
При удалении с помощью левого соединения укажите таблицу для удаления, а не столбцы:
DELETE `relation` FROM `relation`
INNER JOIN `contact` ON `contact`.`contact_relation`=`relation`.`relation_id`
WHERE `relation_one` = 48
основываясь на вашем вопросе и образце запроса, я предполагаю, что вы пытаетесь удалить связанные данные из таблицы отношений, которая связана с таблицей контактов, и имеющей значение атрибута 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
Если я правильно понимаю, вы хотите удалить все записи отношений с помощью ratio_one = 48 и их идентификатор в contact.contact_relation. Это было бы просто:
delete from relation
where relation_one = 48
and relation_id in (select contact_relation from contact);