2个临时表mysql使用联合

时间:2018-10-12 06:57:14

标签: mysql

我制作了2个临时表,并试图在这2个表上执行联合命令,但是我发现了一条错误消息: 错误代码:1137 无法重新打开表格:“库存” 以下是我进行的查询:

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”

请帮助,谢谢

2 个答案:

答案 0 :(得分:0)

来自documentation

  

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

上面的链接中给出的解决方法可以使用CTE,即执行此操作:

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

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

答案 1 :(得分: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