[英]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.