如何在mysql中使这个查询可执行?

时间:2012-02-08 04:05:15

标签: mysql sql sql-server

我有这个mssql查询... 但后来我想在mysql中使用它.. 当我执行这个查询时...它说

错误代码:1109. MULTI DELETE中的未知表

从我的阅读...可能与我在查询中使用的别名有关... 这是我的mssql查询..希望任何人都可以帮助..谢谢你..

Delete logDetail
from logDetail ld1
where 
-- Absent rows only 
ld1.L_Time = '00:00:00'
and ld1.L_Status = 'TIDAK HADIR'
--  And there must be a COMING or BACK row for the same card on the same day 
and exists (select 1 from logDetail ld2
 where ld2.L_Date = ld1.L_Date
and ld2.L_CardID = ld1.L_CardID
and ld2.L_Time > '00:00:00'
and ld2.L_Status <> 'TIDAK HADIR')

2 个答案:

答案 0 :(得分:2)

Delete logDetail

可能存在错误,删除记录的语法是:

DELETE FROM table_name
WHERE some_column=some_value

修改 如果您想使用条件ld1中的ld2DELETE FROM ld1 WHERE ld1.L_Time = '00:00:00' AND ld1.L_Status = 'TIDAK HADIR' AND EXISTS ( SELECT * FROM ld2 WHERE ld2.L_Date = ld1.L_Date AND ld2.L_CardID = ld1.L_CardID AND ld2.L_Time > '00:00:00' AND ld2.L_Status <> 'TIDAK HADIR'); 删除,您的查询应如下所示:

{{1}}

不要复制粘贴此代码在您的控制台中,我没有您的表,所以我没有尝试过,分析它并将其用作参考。如果你的整个数据库在一个死亡和破坏的火热地狱中爆发,我将不承担责任

答案 1 :(得分:2)

您可以使用mysql delete join syntax进行更有效的查询:

delete ld1 from logDetail ld1
join logDetail ld2 on ld2.L_Date = ld1.L_Date -- Note join for efficient query
    and ld2.L_CardID = ld1.L_CardID
    and ld2.L_Time > '00:00:00'
    and ld2.L_Status <> 'TIDAK HADIR'
where ld1.L_Time = '00:00:00'
and ld1.L_Status = 'TIDAK HADIR'

我已经 将所有ld2条件向上移动到连接的on子句中。

此语法避免了where exists ()语法,这种语法非常非常慢(每行一个查询 !)。