使用MySQL左联接删除行
我有两张表格,一张是关于工作期限的,一张是关于描述工作的。每个作业都有一个状态,某些状态意味着必须从另一个表中删除作业的截止日期 我可以用左键使用MySQL左联接删除行,mysql,left-join,delete-row,sql-delete,Mysql,Left Join,Delete Row,Sql Delete,我有两张表格,一张是关于工作期限的,一张是关于描述工作的。每个作业都有一个状态,某些状态意味着必须从另一个表中删除作业的截止日期 我可以用左键轻松地选择符合我标准的作业/截止日期: SELECT * FROM `deadline` LEFT JOIN `job` ON deadline.job_id = job.job_id WHERE `status` = 'szamlazva' OR `status` = 'szamlazhato' OR `status` = 'fizetve' OR `s
轻松地选择符合我标准的作业/截止日期
:
SELECT * FROM `deadline`
LEFT JOIN `job` ON deadline.job_id = job.job_id
WHERE `status` = 'szamlazva'
OR `status` = 'szamlazhato'
OR `status` = 'fizetve'
OR `status` = 'szallitva'
OR `status` = 'storno'
(状态
属于作业
表而非截止日期
)
但是当我想从截止日期
中删除这些行时,MySQL会抛出一个错误。我的问题是:
DELETE FROM `deadline`
LEFT JOIN `job`
ON deadline.job_id = job.job_id
WHERE `status` = 'szamlazva'
OR `status` = 'szamlazhato'
OR `status` = 'fizetve'
OR `status` = 'szallitva'
OR `status` = 'storno'
MySQL错误没有说明什么:
您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解在截止日期时使用接近“LEFT JOINjob
的正确语法。job_id=job.job_id,其中第1行的状态status
='szaml'
如何将我的SELECT
转换为有效的DELETE
查询
DELETE FROM deadline where ID IN (
SELECT d.ID FROM `deadline` d LEFT JOIN `job` ON deadline.job_id = job.job_id WHERE `status` = 'szamlazva' OR `status` = 'szamlazhato' OR `status` = 'fizetve' OR `status` = 'szallitva' OR `status` = 'storno');
我不确定这种子查询在MySQL中是否有效,但请尝试一下。我假设您的截止日期表中有一个ID列。您只需指定在哪些表上应用删除
仅删除截止日期
行:
DELETE `deadline` FROM `deadline` LEFT JOIN `job` ....
DELETE `deadline`, `job` FROM `deadline` LEFT JOIN `job` ....
DELETE `job` FROM `deadline` LEFT JOIN `job` ....
删除截止日期
和作业
行:
DELETE `deadline` FROM `deadline` LEFT JOIN `job` ....
DELETE `deadline`, `job` FROM `deadline` LEFT JOIN `job` ....
DELETE `job` FROM `deadline` LEFT JOIN `job` ....
仅删除作业
行:
DELETE `deadline` FROM `deadline` LEFT JOIN `job` ....
DELETE `deadline`, `job` FROM `deadline` LEFT JOIN `job` ....
DELETE `job` FROM `deadline` LEFT JOIN `job` ....
如果您使用的是“表格as”,则指定要删除的表格
在本例中,我删除了表2中不存在的所有表_1行
DELETE t1 FROM `table_1` t1 LEFT JOIN `table_2` t2 ON t1.`id` = t2.`id` WHERE t2.`id` IS NULL
试试这个:
DELETE `deadline`
FROM `deadline`
INNER JOIN `job` ON `deadline`.`job_id` = `job`.`id`
WHERE `job`.`id` = 123
MySQL允许您在DELETE语句中使用内部JOIN子句来删除表中的行以及另一个表中的匹配行
例如,要从T1和T2表中删除满足指定条件的行,请使用以下语句:
DELETE T1, T2
FROM T1
INNER JOIN T2 ON T1.key = T2.key
WHERE condition;
注意,您将表名T1和T2放在DELETE和FROM关键字之间。如果省略T1表,DELETE语句只删除T2表中的行。类似地,如果省略T2表,DELETE语句将只删除T1表中的行
希望对我有所帮助。这个脚本对我很有用:
DELETE t
FROM table t
INNER JOIN join_table jt ON t.fk_column = jt.id
WHERE jt.comdition_column…;
OP仍然需要指定要删除的内容,以使查询明确无误。在子查询中使用
会使一切都慢得多。最好避免这种情况。在DELETE
和FROM
之间没有提到任何表。使用“AS”时,我必须在子句中使用别名来实现我的目的(删除孤立项):从表1中删除t1作为t1左连接t2作为t2 ON t1.uid=t2.result其中t2.result为null有趣的是,我的PHPMyAdmin 4.5.1语法检查器不会接受DELETE
和FROM
之间的任何内容,但当我按下Go时,查询运行正常。