我有这个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')
答案 0 :(得分:2)
Delete logDetail
可能存在错误,删除记录的语法是:
DELETE FROM table_name
WHERE some_column=some_value
修改强>
如果您想使用条件ld1
中的ld2
从DELETE 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 ()
语法,这种语法非常非常慢(每行一个查询 !)。