当前位置: 首页 > 面试题库 >

SQL DELETE与JOIN另一个表在WHERE条件

司空元凯
2023-03-14
问题内容

我必须从中删除guide_categoryguide表无关的行(无效关系)。

这是我想做的,但是它当然不起作用。

DELETE FROM guide_category AS pgc 
 WHERE pgc.id_guide_category IN (SELECT id_guide_category 
                                   FROM guide_category AS gc
                              LEFT JOIN guide AS g ON g.id_guide = gc.id_guide
                                  WHERE g.title IS NULL)

错误:

您不能在FROM子句中指定目标表’guide_category’进行更新


问题答案:

由于锁定实现问题,MySQL不允许使用DELETE或引用受影响的表UPDATE

您需要在JOIN此处制作一个:

DELETE  gc.*
FROM    guide_category AS gc 
LEFT JOIN
        guide AS g 
ON      g.id_guide = gc.id_guide
WHERE   g.title IS NULL

或只是使用NOT IN

DELETE  
FROM    guide_category AS gc 
WHERE   id_guide NOT IN
        (
        SELECT  id_guide
        FROM    guide
        )


 类似资料:
  • 我正在尝试从技能作业表中删除一行 以下是我的疑问 但它抛出以下错误; 致命错误:未捕获的异常'异常'消息'您有一个错误在您的SQL语法;检查手册,对应于您的MySQL服务器版本的正确的语法使用附近'skj内连接作业j上<--plhd--0/<--#############################################################################

  • 问题内容: 将条件放入JOIN子句与WHERE子句之间是否有任何区别(性能,最佳实践等)? 例如… 您更喜欢哪一个(也许是为什么)? 问题答案: 关系代数允许子句和中的谓词可互换,因此即使带有子句的查询也可以使谓词由优化器重新排列,以便在处理过程中将它们 排除在外。 我建议您以最易读的方式编写查询。 有时,这包括使相对“不完整”并将某些条件置于简单位置,以使过滤条件列表更易于维护。 例如,代替:

  • 在这个候选答案中,有人断言,在某些涉及一些WHERE子句的情况下,JOIN优于LEFT JOIN,因为它不会混淆查询计划器,也不是“无意义的”。断言/假设是,这对任何人来说都应该是显而易见的。 请进一步解释或提供链接以供进一步阅读。

  • 问题内容: 为简单起见,假设所有相关字段均为。 你可以做: 要不然: 这两个工作方式是否相同? 问题答案: 是您应该使用的ANSI语法。 通常认为它更具可读性,尤其是当您连接许多表时。 只要有需要,也可以轻松地将其替换为。 该语法更关系模型为主。 两个表ed的结果是表的笛卡尔积,将对其应用过滤器,该过滤器仅选择连接列匹配的那些行。 使用语法更容易看到这一点。 以您的示例为例,在MySQL(通常在S

  • 问题内容: 说我有一个表作为 是外键回到桌子 是回到表的外键 只是或 是一个整数 和一张桌子作为 我需要从获取的所有行,对于同样的在同一个具有相对值。请记住,只能有两个值之一-或。在上面的示例中,这将是行和。 另一个限制是的相应行必须用于。 到目前为止我的查询 问题: 将join子句保留为as会减慢查询速度。如果将其移至WHERE子句,则性能会更好。这激起了我的兴趣, 我想知道为什么 。 主键和相

  • 问题内容: 我有两张桌子。 表1 包含的公司的地理位置在经纬度坐标中以lat / lng坐标进行地理定位 表2 还包含 表1 中未地理参考的相同公司,以及数百个地址已地理参考的其他公司。 我需要做的就是将 Table1* 公司的lat / lng值插入 表2中 的相应条目中。这些插入可以基于的共同点是该列。 *** 我敢肯定,这是一个简单的问题,但是我很少使用SQL。 问题答案: 假设 插入“ t