Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何删除左联接找到的记录_Mysql_Sql - Fatal编程技术网

Mysql 如何删除左联接找到的记录

Mysql 如何删除左联接找到的记录,mysql,sql,Mysql,Sql,通过以下查询,我可以找到要删除的数据: SELECT ab.id, ab.anlage_id, a.id FROM `anlagetobedienung` AS ab LEFT JOIN anlage_new AS a ON ab.`anlage_id` = a.id WHERE a.id IS NULL 如何编写删除ANLAGETOBEDIENNG表中找到的记录的DELETE语句?通常我会说: DELETE ab FROM `anlagetobedienung` AS ab LEFT JO

通过以下查询,我可以找到要删除的数据:

SELECT ab.id, ab.anlage_id, a.id
FROM `anlagetobedienung` AS ab
LEFT JOIN anlage_new AS a ON ab.`anlage_id` = a.id
WHERE a.id IS NULL
如何编写删除ANLAGETOBEDIENNG表中找到的记录的DELETE语句?

通常我会说:

DELETE ab
FROM `anlagetobedienung` AS ab 
LEFT JOIN anlage_new AS a ON ab.`anlage_id` = a.id 
WHERE a.id IS NULL 
delete anlage_new 
where id in (
    SELECT  a.id
    FROM `anlagetobedienung` AS ab
    LEFT JOIN anlage_new AS a ON ab.`anlage_id` = a.id
    WHERE a.id IS NULL
)
i、 e.删除主键所在的行,主键位于标识要删除记录的select结果中

但是根据你的查询,那些id=NULL似乎没有任何意义

你能提供一些示例数据吗

在您编辑之后,我想说这应该是可行的:

delete `anlagetobedienung` 
where id in (
    SELECT  ab.id
    FROM `anlagetobedienung` AS ab
    LEFT JOIN anlage_new AS a ON ab.`anlage_id` = a.id
    WHERE a.id IS NULL
)

注意:内部select使用“ab.id”而不是“a.id”,这似乎是原始select中唯一有可能包含有用内容的列。

另一种可能的解决方案:

DELETE FROM anlagebedienung aDEL WHERE aDEL.id IN 
 (SELECT ab.id 
  FROM `anlagetobedienung` AS ab
  LEFT JOIN anlage_new AS a ON ab.`anlage_id` = a.id
  WHERE a.id IS NULL )
DELETE FROM anlagetobedienung A
WHERE
    NOT EXISTS (SELECT * FROM anlage_new AN WHERE AN.id = A.anlage_id)
如果MySQL在MS SQL支持的DELETE-FROM中支持别名,但我知道一些主要的RDBMS不支持别名,那么您可以:

DELETE ab
FROM
    anlagetobedienung AS ab
LEFT JOIN anlage_new AS a ON
    ab.anlage_id = a.id
WHERE
    a.id IS NULL
你可以简单地做:

DELETE FROM anlagetobedienung ab
 WHERE NOT EXISTS (SELECT NULL
                     FROM anlage_new a
                    WHERE a.id = ab.anlage_id
                  )

so:删除id为空的anlage\u new?在anlage\u new中找到记录?您的查询特别要求ANLAGETOBEDENUNG中的行,而ANLAGETOBEDENUNG中没有行。您想从AnlageToBeDenung中删除吗?您是对的,它应该是AnlageToBeDenung。更正了问题。这就是我尝试的。我在多重删除中得到了1109-未知表'AnlageToBeDenung',这不是打字错误。@BetaRide:表名已被化名。尝试用delete替换delete ANLAGETOBEDIENNGab@Andomar:感谢您修复此查询!谢谢你的回答。这是我以前试过的。结果是:1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解第1行“aDEL WHERE aDEL.id IN SELECT ab.id FROM anlagetobedienung AS ab LEFT J”附近要使用的正确语法