我已经搜索过,但发现没有适用于我实例的解决方案。
带有2个表的mySQL数据库。使用表b中的结果来识别要删除的表a中的行。
当我运行此查询时,它返回表a。
的结果SELECT a.* FROM forteweb_vhatest.siteind_frm_item_metas a
INNER JOIN (
SELECT item_id FROM forteweb_vhatest.siteind_frm_item_metas
WHERE field_id = 122
AND ExpiryDate < now()
)b ON a.item_id = b.item_id ;
当我尝试使用
删除这些记录时出错DELETE a.* FROM forteweb_vhatest.siteind_frm_item_metas a
INNER JOIN (
SELECT item_id FROM forteweb_vhatest.siteind_frm_item_metas
WHERE field_id = 122
AND ExpiryDate < now()
)b ON a.item_id = b.item_id ;
你能告诉我为什么吗?
谢谢。
答案 0 :(得分:0)
SELECT a.* FROM forteweb_vhatest.siteind_frm_item_metas a
INNER JOIN (
SELECT item_id FROM forteweb_vhatest.siteind_frm_item_metas
WHERE field_id = 122
AND ExpiryDate < now()
)b ON a.item_id = b.item_id ;
/ *在DELETE * /
之后添加了表别名DELETE a FROM forteweb_vhatest.siteind_frm_item_metas a
INNER JOIN (
SELECT item_id FROM forteweb_vhatest.siteind_frm_item_metas
WHERE field_id = 122
AND ExpiryDate < now()
)b ON a.item_id = b.item_id ;
答案 1 :(得分:0)
您应该从a.*
语句中删除delete
,因为delete
不接受delete
关键字后的参数。
它删除从表名后面给出的查询返回的所有内容。如果在表名后没有给出任何内容,则将删除所有记录。
您可以查看delete
声明here的语法。
希望这能澄清你的疑问:)