MySql 更新无法识别临时 table
MySql update not recognizing temporary table
我有以下导致错误的查询脚本:
SET @row_number = 0;
Drop Table If Exists testtable2;
Create Temporary Table testtable2
SELECT
*
FROM
(SELECT
row_names, (@row_number:=@row_number + 1) AS num, date_add(date_time, INTERVAL 1 MINUTE) AS date_time, meter, kw
FROM
testtable
WHERE
DAY(date_time) = 1
AND HOUR(date_time) = 2) AS testtable2
WHERE
MOD(testtable2.num, 2) = 0;
UPDATE testtable
SET
testtable.date_time = testtable2.date_time
WHERE
testtable.row_names = testtable2.row_names;
错误显示 Error Code: 1054. Unknown column 'testtable2.row_names' in 'where clause'
我创建了一个包含列 date_time 的临时 table,但我的更新查询无法识别该列的存在。我可以 运行 类似 SELECT * FROM testtable2;它 returns 表明该列确实是用正确的标题生成的。为什么我的更新无法识别此列?
您实际上是想使用 CREATE TABLE ... AS
构造,但在您的情况下它的格式有误。它应该像下面这样。
Create Temporary Table testtable2 AS
SELECT
*
FROM
(SELECT
row_names, (@row_number:=@row_number + 1) AS num,
date_add(date_time, INTERVAL 1 MINUTE) AS date_time,
meter,
kw
FROM
testtable
WHERE
DAY(date_time) = 1
AND HOUR(date_time) = 2) AS XXX <-- Here
WHERE
MOD(testtable2.num, 2) = 0;
您的问题是,您的临时 table 和内联视图别名相同。以不同的方式命名它们。查看编辑后的查询。
您可以直接 JOIN
使用内部查询,并且可以像
一样执行 UPDATE
UPDATE testtable
JOIN (
SELECT
*
FROM
(SELECT
row_names, (@row_number:=@row_number + 1) AS num, date_add(date_time, INTERVAL 1 MINUTE) AS date_time, meter, kw
FROM
testtable
WHERE
DAY(date_time) = 1
AND HOUR(date_time) = 2) AS testtable2
WHERE
MOD(testtable2.num, 2) = 0 ) xx ON testtable.row_names = xx.row_names
SET
testtable.date_time = xx.date_time;
这是您的 update
声明:
UPDATE testtable
SET testtable.date_time = testtable2.date_time
WHERE testtable.row_names = testtable2.row_names;
什么是testtable
?你还没有定义那个。您创建了 testtable2
。如果你有 testtable
,那么你可能想要一个 join
:
UPDATE testtable tt JOIN
testtable2 tt2
ON tt.row_names = tt2.row_names
SET tt.date_time = tt2.date_time;
我有以下导致错误的查询脚本:
SET @row_number = 0;
Drop Table If Exists testtable2;
Create Temporary Table testtable2
SELECT
*
FROM
(SELECT
row_names, (@row_number:=@row_number + 1) AS num, date_add(date_time, INTERVAL 1 MINUTE) AS date_time, meter, kw
FROM
testtable
WHERE
DAY(date_time) = 1
AND HOUR(date_time) = 2) AS testtable2
WHERE
MOD(testtable2.num, 2) = 0;
UPDATE testtable
SET
testtable.date_time = testtable2.date_time
WHERE
testtable.row_names = testtable2.row_names;
错误显示 Error Code: 1054. Unknown column 'testtable2.row_names' in 'where clause'
我创建了一个包含列 date_time 的临时 table,但我的更新查询无法识别该列的存在。我可以 运行 类似 SELECT * FROM testtable2;它 returns 表明该列确实是用正确的标题生成的。为什么我的更新无法识别此列?
您实际上是想使用 CREATE TABLE ... AS
构造,但在您的情况下它的格式有误。它应该像下面这样。
Create Temporary Table testtable2 AS
SELECT
*
FROM
(SELECT
row_names, (@row_number:=@row_number + 1) AS num,
date_add(date_time, INTERVAL 1 MINUTE) AS date_time,
meter,
kw
FROM
testtable
WHERE
DAY(date_time) = 1
AND HOUR(date_time) = 2) AS XXX <-- Here
WHERE
MOD(testtable2.num, 2) = 0;
您的问题是,您的临时 table 和内联视图别名相同。以不同的方式命名它们。查看编辑后的查询。
您可以直接 JOIN
使用内部查询,并且可以像
UPDATE
UPDATE testtable
JOIN (
SELECT
*
FROM
(SELECT
row_names, (@row_number:=@row_number + 1) AS num, date_add(date_time, INTERVAL 1 MINUTE) AS date_time, meter, kw
FROM
testtable
WHERE
DAY(date_time) = 1
AND HOUR(date_time) = 2) AS testtable2
WHERE
MOD(testtable2.num, 2) = 0 ) xx ON testtable.row_names = xx.row_names
SET
testtable.date_time = xx.date_time;
这是您的 update
声明:
UPDATE testtable
SET testtable.date_time = testtable2.date_time
WHERE testtable.row_names = testtable2.row_names;
什么是testtable
?你还没有定义那个。您创建了 testtable2
。如果你有 testtable
,那么你可能想要一个 join
:
UPDATE testtable tt JOIN
testtable2 tt2
ON tt.row_names = tt2.row_names
SET tt.date_time = tt2.date_time;