mySQL - 使用Inner Join删除表中的行

时间:2017-09-02 04:02:10

标签: mysql

我已经搜索过,但发现没有适用于我实例的解决方案。

带有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 ;

你能告诉我为什么吗?

谢谢。

2 个答案:

答案 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的语法。

希望这能澄清你的疑问:)