1

我已经创建了 2 个临时表并尝试对这 2 个表执行联合命令,但我发现了一条错误消息:错误代码:1137 无法重新打开表:'stock' 以下是我所做的查询:

DROP TABLE IF EXISTS stok;
DROP TABLE IF EXISTS bdp;
CREATE TEMPORARY TABLE stok AS(SELECT * from productA);

CREATE TEMPORARY TABLE bdp AS(SELECT * from quantity);

SELECT AllSubs.kode, stok.stok,bdp.qty FROM
(SELECT kode FROM stok
UNION
SELECT kode FROM bdp) AS AllSubs
LEFT JOIN stok ON stok.kode = AllSubs.kode
LEFT JOIN bdp ON bdp.kode = AllSubs.kode
GROUP BY AllSubs.kode

如上所述,此查询出现错误消息:错误代码:1137 无法重新打开表:'stok'

请您的帮助,谢谢

4

2 回答 2

0

文档中:

您不能在同一查询中多次引用 TEMPORARY 表。

上述链接中给出的使用 CTE 的解决方法,即这样做:

WITH stok AS (
    SELECT * from productA
),
bdp AS (
    SELECT * from quantity
)
-- your query here

但这需要 MySQL 8+ 或更高版本。如果您使用的是早期版本,那么您可以尝试在两个临时表后面内联查询。或者,您可以创建非临时真正的表,并使用它们。

于 2018-10-12T07:00:57.487 回答
0

您不能多次引用临时表,因此您应该将查询重写为

SELECT distinct AllSubs.kode
        , productA.stok
        , quantity.qty 
FROM  (
    SELECT kode FROM productA
    UNION
    SELECT kode FROM quantity
) AS AllSubs
LEFT JOIN productA ON productA.kode = AllSubs.kode
LEFT JOIN quantity ON bdp.kode = AllSubs.kode

并且您没有使用聚合函数,那么您不应该使用 group by .. 最终使用 distinct 来避免行重复。

在更新版本的 mysql 中不允许对没有聚合函数的未聚合列使用 group by

于 2018-10-12T07:07:33.330 回答