首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql严格模式

mysql严格模式
EN

Stack Overflow用户
提问于 2013-12-13 12:00:43
回答 1查看 170关注 0票数 0

我有以下查询:

代码语言:javascript
复制
DELETE FROM table1 
WHERE node_id = ".$id." 
AND date < (
            SELECT
                (MAX(date)- INTERVAL 1 MONTH) 
            from table1  
            WHERE node_id = ".$id."
)

但是,由于启用了mysql严格模式,我得到了以下错误:

代码语言:javascript
复制
ERROR 1093 (HY000): You can't specify target table 'table1' for update in FROM clause

在联机调查之后,我试图按以下方式重新创建查询:

代码语言:javascript
复制
SELECT 
    * 
FROM table1 as tb1 
INNER JOIN table1 as tb2 
    on tb1.id = tb2.id 
HAVING tb1.date < MAX(tb2.date)-INTERVAL 1 MONTH AND tb1.node_id = 1;

但是,结果集返回为空。

我已经将max(tb2.date)更改为手动输入的日期,这给了我预期的结果。

你知道这是怎么回事吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-13 12:29:52

你能试试这个吗?

使用联接

数据

代码语言:javascript
复制
mysql> select * from test;
+---------+------------+
| node_id | dt         |
+---------+------------+
|       1 | 2011-03-01 |
|       1 | 2011-02-01 |
|       1 | 2011-01-01 |
+---------+------------+
3 rows in set (0.00 sec)

选择

代码语言:javascript
复制
SELECT *
FROM (
  SELECT MAX(dt) AS max_dt
  FROM test
  WHERE node_id = 1
) x INNER JOIN test ON test.node_id = 1 AND test.dt < x.max_dt;
+------------+---------+------------+
| max_dt     | node_id | dt         |
+------------+---------+------------+
| 2011-03-01 |       1 | 2011-01-01 |
| 2011-03-01 |       1 | 2011-02-01 |
+------------+---------+------------+

删除

代码语言:javascript
复制
DELETE test
FROM (
  SELECT MAX(dt) AS max_dt
  FROM test
  WHERE node_id = 1
) x INNER JOIN test ON test.node_id = 1 AND test.dt < x.max_dt;
Query OK, 2 rows affected (0.02 sec)

检查

代码语言:javascript
复制
mysql> select * from test;
+---------+------------+
| node_id | dt         |
+---------+------------+
|       1 | 2011-03-01 |
+---------+------------+
1 row in set (0.00 sec)

使用变量

在您的示例中,您只尝试删除一个node_id。这就产生了简单的查询。

代码语言:javascript
复制
SELECT @max_dt := MAX(dt)
FROM test  
WHERE node_id = 1;
+--------------------+
| @max_dt := MAX(dt) |
+--------------------+
| 2011-03-01         |
+--------------------+


DELETE FROM test 
WHERE node_id = 1
AND dt < @max_dt;
Query OK, 2 rows affected (0.00 sec)

顺便说一句

你问了17个问题,但没有接受任何答案。有没有有用的答案?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20565999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档