【问题标题】:Delete with join error删除加入错误
【发布时间】:2014-10-09 13:45:31
【问题描述】:

执行此查询后:

 DELETE from  swimming_class as tb1 JOIN  (SELECT class_id FROM `swimming_class`
 left join swimming_school on swimming_school.school_id = swimming_class.school_id
 where swimming_school.school_name is NULL)  as temp ON temp.class_id = tb1.class_id

我收到此错误:

1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'as tb1 JOIN (SELECT class_id FROM swing_class left join swing_school on' 附近使用正确的语法

【问题讨论】:

  • 您不能从您在 JOIN 中使用的任何表中删除,并在 DELETE 语句中删除表的别名
  • @Sal00m 好吧,你可以 - 你只需要变得聪明一点;-)

标签: mysql join


【解决方案1】:

我认为您真正追求的是以下 (SQL Fiddle):

DELETE sc
FROM swimming_class sc
INNER JOIN swimming_school ss ON ss.school_id = sc.school_id
WHERE ss.school_name is NULL

【讨论】:

  • #1093 - 您不能在 FROM 子句中指定目标表 'swimming_class' 进行更新
  • @Shijin,我更新了我的答案并包含了一个演示。这就是你所追求的吗?
  • @Linger 使用LEFT JOIN,查看原始查询
  • @Rimas,在这种情况下使用LEFT JOININNER JOIN 相同,因为使用了WHERE ss.school_name is NULL。如果LEFT JOIN 确实按您的预期运行并从swimming_class 表中提取所有记录,那么所有记录都将被删除,并且首先没有理由加入另一个表。要使LEFT JOIN 正常工作,您必须使用DELETE sc FROM swimming_class sc LEFT JOIN swimming_school ss ON ss.school_id = sc.school_id AND ss.school_name is NULL
  • @Linger 我的意思是只将INNER 更改为LEFT,然后还会从swimming_class 中删除记录,其中school_id 不在swimming_school 中,请参阅SQL 上的修改查询小提琴(添加了此类记录):sqlfiddle.com/#!2/a78678/1
猜你喜欢
  • 1970-01-01
  • 2013-08-09
  • 2013-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-30
  • 1970-01-01
  • 2014-06-24
相关资源
最近更新 更多