gpt4 book ai didi

mysql - 联合查询定义别名时出错

转载 作者:行者123 更新时间:2023-11-30 01:17:39 26 4
gpt4 key购买 nike

我从三个不同的表中提取相同的信息:我需要获取一个表中的所有数据,并将每个查询中的结果分组。我编写的查询如下:

SELECT centri_costoricavo.descrizione, movimenti.movimento, sum(totali) FROM 
SELECT centri_costoricavo.descrizione, movimenti.movimento, sum(fa_ce_ca.importo) AS totali FROM fatture, fa_ce_ca,centri_costoricavo, movimenti WHERE fatture.esercizio=3 AND fatture.id_fa=fa_ce_ca.id_fa AND centri_costoricavo.id=fa_ce_ca.centro AND movimenti.id=fa_ce_ca.caus GROUP BY fa_ce_ca.caus AS fatture
UNION SELECT centri_costoricavo.descrizione, movimenti.movimento, sum(mov_banca.importo) AS totali FROM mov_banca,centri_costoricavo, movimenti,esercizi WHERE centri_costoricavo.id=mov_banca.centro AND movimenti.id=mov_banca.tipo AND mov_banca.data BETWEEN esercizi.start AND esercizi.end AND esercizi.id=3 AND mov_banca.per=2 GROUP BY mov_banca.tipo AS mov_banca
UNION SELECT centri_costoricavo.descrizione, movimenti.movimento, sum(mov_cassa.importo) AS totali FROM mov_cassa,centri_costoricavo, movimenti,esercizi WHERE centri_costoricavo.id=mov_cassa.centro AND movimenti.id=mov_cassa.tipo AND mov_cassa.data BETWEEN esercizi.start AND esercizi.end AND esercizi.id=3 AND mov_cassa.per=2 GROUP BY mov_cassa.tipo) AS mov_cassa
GROUP BY movimenti.movimento

尝试执行查询时出现以下错误:“...在 'AS mov_banca UNION (S...”附近使用的正确语法。几个小时后,我把头撞在墙上,我看不到我要做什么我做错了。有什么帮助吗?

提前致谢!莱里奥

最佳答案

去掉每个联合中 SELECT 查询周围的括号。正确的语法是:

SELECT <column-list>
FROM {<table>|<derived-table>} [[AS] <alias>]
[UNION [ALL]
SELECT <column-list>
FROM {<table>|<derived-table>} [[AS] <alias>]
]*

请注意,您仍然需要在派生表子查询周围使用括号,而不是联合的部分。

此外,在尝试格式化查询时,括号和子查询似乎发生了有趣的事情。我相信您想要来自联合的总和,并且很可能想要一个 UNION ALL不是一个 UNION。您还需要从整个派生表子查询中进行选择(在下面的示例中我将其命名为 X)

因此,您的查询应该(可能)是:

SELECT X.descrizione, X.movimento, sum(totali) 
FROM (
SELECT centri_costoricavo.descrizione, movimenti.movimento, sum(fa_ce_ca.importo) AS totali
FROM fatture, fa_ce_ca,centri_costoricavo, movimenti
WHERE fatture.esercizio=3
AND fatture.id_fa=fa_ce_ca.id_fa
AND centri_costoricavo.id=fa_ce_ca.centro
AND movimenti.id=fa_ce_ca.caus
GROUP BY fa_ce_ca.caus
UNION ALL
SELECT centri_costoricavo.descrizione, movimenti.movimento, sum(mov_banca.importo) AS totali
FROM mov_banca,centri_costoricavo, movimenti,esercizi
WHERE centri_costoricavo.id=mov_banca.centro
AND movimenti.id=mov_banca.tipo
AND mov_banca.data BETWEEN esercizi.start AND esercizi.end
AND esercizi.id=3
AND mov_banca.per=2
GROUP BY mov_banca.tipo
UNION ALL
SELECT centri_costoricavo.descrizione, movimenti.movimento, sum(mov_cassa.importo) AS totali
FROM mov_cassa,centri_costoricavo, movimenti,esercizi
WHERE centri_costoricavo.id=mov_cassa.centro
AND movimenti.id=mov_cassa.tipo
AND mov_cassa.data BETWEEN esercizi.start AND esercizi.end
AND esercizi.id=3
AND mov_cassa.per=2
GROUP BY mov_cassa.tipo
) AS X
GROUP BY X.movimento

尽管你仍然非常奇怪(阅读:仅MySQL,黑客,难以理解并且坦率地说不可预测)GROUP BY和您选择使用“旧”JOIN 语法会使您的查询更加难以阅读。

关于mysql - 联合查询定义别名时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18900129/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com