0

我正在尝试删除在另一个表中找到的行,如下所示

DELETE l, lk, lp, sl
FROM listings l
LEFT JOIN listings_keywords lk
ON lk.listing_sid = l.sid
LEFT JOIN listings_properties lp
ON lp.object_sid = l.sid
LEFT JOIN source_listings sl
ON sl.listing_id = l.sid
WHERE l.user_sid = 4645
AND l.sid IN (SELECT listing_id FROM source_listings)

似乎会产生错误

Error: SQLSTATE[HY000]: General error: 1093 You can't specify target table 'sl' for update in FROM clause

我正在尝试删除在source_listings特定 user_sid = 4645下找到的任何内容

有没有办法解决这个问题,以便从 SQL 中指定的这四个表中删除任何符合这些条件的行?

4

2 回答 2

0

删除这个

AND l.sid IN (SELECT listing_id FROM source_listings)

在 MySQL 中,您不能修改在 SELECT 部分中使用的同一个表。由于您要从 table 中删除行source_listings,因此不能在 select statement 中使用它。

除了错误之外,不需要子查询,因为您已经在 listings表和source_listings表之间进行了 JOIN

于 2013-09-24T03:41:23.913 回答
0

您不能在子查询上更新表 - source_listings。如果无法摆脱该语句,则需要强制引用的表作为 MySQL 生成的临时表存在:

DELETE l, lk, lp, sl
FROM listings l
LEFT JOIN listings_keywords lk
ON lk.listing_sid = l.sid
LEFT JOIN listings_properties lp
ON lp.object_sid = l.sid
LEFT JOIN source_listings sl
ON sl.listing_id = l.sid
WHERE l.user_sid = 4645
AND l.sid IN
SELECT listing_id FROM (SELECT listing_id FROM source_listings) X
于 2013-09-24T03:41:24.307 回答