gpt4 book ai didi

php - 仅允许1行时删除最后插入的行SQL

转载 作者:行者123 更新时间:2023-11-29 08:02:37 25 4
gpt4 key购买 nike

我想知道为什么我的删除不起作用。

我正在尝试删除 SQL 行,即仅接受 1 行包含 IP 地址和用户 ID 的行,并且仅接受包含 1 行包含 IP 地址和空白用户 ID 的行时插入的最后一个 SQL 行。

这是我的代码:

DELETE
FROM visitor
WHERE ip_address NOT IN
(SELECT ip_address
FROM visitor
WHERE ip_address = '".$ipAddress."'
AND user_id = ''
ORDER BY user_id DESC LIMIT 1)

为什么我的 SQL 行没有删除?

最佳答案

简单:因为子查询中不允许使用要删除的表。只需单独运行 SELECT 查询,然后使用结果执行 DELETE...

RTM ,它明确指出这里不允许这样做:

Incorrectly used table in subquery:Error 1093 (ER_UPDATE_TABLE_USED)SQLSTATE = HY000Message = "You can't specify target table 'x'for update in FROM clause"This error occurs in cases such as the following, which attempts to modify a table and select from the same table in the subquery:UPDATE t1 SET column2 = (SELECT MAX(column1) FROM t1);You can use a subquery for assignment within an UPDATE statement because subqueries are legal in UPDATE and DELETE statements as well as in SELECT statements. However, you cannot use the same table (in this case, table t1) for both the subquery FROM clause and the update target.

特别是最后一句很重要:但是,您不能对子查询 FROM 子句和更新目标使用同一个表(在本例中为表 t1)。

有一个解决这个问题的 hacky 方法,它很愚蠢,但它在我上次检查时有效,即将您的子查询包装在另一个子中 (WHERE x IN (SELECT id FROM (SELECT id FROM tbl.. .)))。但这在各方面都很糟糕

关于php - 仅允许1行时删除最后插入的行SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23391433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com