繁体   English   中英

2个临时表mysql使用联合

[英]2 temp table mysql using union

我已经制作了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'

请您的帮助,谢谢

文档中

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

上面链接中给出的解决方法可以使用CTE,例如:

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM