mysql DELETE查询出现JOIN错误.


mysql DELETE query with JOIN error...

这是我的问题,

我必须用联接语句在mysql中构建一个查询。。。我的数据库表如下所示:

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

我必须从联系人中删除联系人具有关系值(关系id)和所有这些关系,但仅当我的relation_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,而不仅仅是我需要的关系。。。(我指的是在contact_relation下引用到联系人表中的那些(如果这些关系的relation_one设置为48 ONLY,则这是我可能删除的关系的id!)

我的意思是:我可以在关系表中有100条记录,其中relation_one IS 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

根据您的问题和查询示例,我假设您正试图从与联系人表关联的关系表中删除关联数据,并且relation_one值为48,这可以通过以下方式完成:

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

有关详细信息,请参阅以下url上的多表删除:http://dev.mysql.com/doc/refman/5.6/en/delete.html

如果我理解正确,您希望删除relation_one=48的所有关系记录及其在contact.contact_relation中的id

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