我制作了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”
请帮助,谢谢
答案 0 :(得分:0)
在同一查询中,您不能多次引用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