使用JOIN错误的mysql DELETE查询...

时间:2014-09-15 08:01:32

标签: php mysql sql join sql-delete

这是我的问题,

我必须使用join语句在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下的联系表中的那些(我可以删除的关系的id,如果这些关系有relation_one}仅限48岁!)

我的意思是:我可以在关系表中有100条记录,其中relation_one是48 ...但我只想删除relation_id = contact_relation ...我的{{1}这些“关系”在大多数情况下都是contact.contact_relation ...但有时,对于2/100,它是在那里写的现有null ......这些是我“可能必须”删除的关系... < / p>

3 个答案:

答案 0 :(得分:1)

使用左连接删除时,请指定要删除的表而不是列:

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

答案 1 :(得分:1)

根据您的问题和查询示例,我假设您正在尝试从关联表中删除与联系人表关联且具有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

答案 2 :(得分:0)

如果我理解正确,您希望删除contact_one = 48的所有关系记录及其在contact.contact_relation中的ID。这只是:

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