带有 JOIN 错误的 mysql DELETE 查询...

Posted

技术标签:

【中文标题】带有 JOIN 错误的 mysql DELETE 查询...【英文标题】:mysql DELETE query with JOIN error... 【发布时间】:2014-09-15 08:01:31 【问题描述】:

这是我的问题,

我必须使用连接语句在mysql 中构建查询... 我的数据库表如下所示:

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

我必须从联系人中删除具有关系值(关系 id)的联系人以及所有这些关系,但仅限于我的 relationship_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 ONLY !)

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

【问题讨论】:

用SQL Fiddle来说明这一点可能会有所帮助 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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

以上是关于带有 JOIN 错误的 mysql DELETE 查询...的主要内容,如果未能解决你的问题,请参考以下文章

将 join 与 delete 语句一起使用时出现语法错误 [重复]

如何使用连接缓冲区(块嵌套循环)错误修复MySql的LEFT JOIN?

Mysql的join语句

MySQL 不使用带有 JOIN、WHERE 和 ORDER 的索引

MSSql (Compact) DELETE-Query with JOIN

带有 SUM 的 MySQL LEFT JOIN 很慢