mysql - 如何将 UNION 与两个选择和一些 JOINS 一起使用

标签 mysql select union

我在执行此 sql 时遇到问题。我需要获取结果并通过 JSON 将其发送到我的网页。

SELECT `produto`.`nome` `nome`, `estoque_movimento`.`data`, `estoque_movimento`.`qtd`, `estoque_movimento`.`motivo`, `marca`.`nome` `marca`, `tipo_produto`.`nome` `categoria` 
FROM `estoque_movimento` 
LEFT JOIN `produto` ON `produto`.`id` = `estoque_movimento`.`produto_id` 
LEFT JOIN `tipo_produto` ON `tipo_produto`.`id` = `produto`.`tipo_id` 
LEFT JOIN `marca` ON `marca`.`id` = `produto`.`marca_id` 
WHERE `estoque_movimento`.`data` >= '2018-03-26 00:00:00' 
AND `estoque_movimento`.`data` <= '2018-10-03 23:59:59' 
ORDER BY `estoque_movimento`.`data` DESC 

UNION 

SELECT `produto`.`nome` `nome`, `pedido_produto`.`criado_em`, `pedido_produto`.`qtde`, CONCAT("Alocado no pedido n°: ", pedido_produto.produto_id), `marca`.`nome` `marca`, `tipo_produto`.`nome` `categoria` 
FROM `pedido_produto` 
LEFT JOIN `pedido` ON `pedido`.`id` = `pedido_produto`.`pedido_id` 
LEFT JOIN `produto` ON `produto`.`id` = `pedido_produto`.`produto_id` 
LEFT JOIN `tipo_produto` ON `tipo_produto`.`id` = `produto`.`tipo_id` 
LEFT JOIN `marca` ON `marca`.`id` = `produto`.`marca_id` 
WHERE `pedido`.`is_finalizado` = 0 
GROUP BY `produto`.`nome`, `pedido_produto`.`produto_id`

我收到这个错误:

#1221 - Incorrect usage of UNION and ORDER BY

最佳答案

在不同的 Select 查询组周围使用括号 ( )

尝试:

(
 SELECT `produto`.`nome` `nome`, `estoque_movimento`.`data`, `estoque_movimento`.`qtd`, `estoque_movimento`.`motivo`, `marca`.`nome` `marca`, `tipo_produto`.`nome` `categoria` 
 FROM `estoque_movimento` 
 LEFT JOIN `produto` ON `produto`.`id` = `estoque_movimento`.`produto_id` 
 LEFT JOIN `tipo_produto` ON `tipo_produto`.`id` = `produto`.`tipo_id` 
 LEFT JOIN `marca` ON `marca`.`id` = `produto`.`marca_id` 
 WHERE `estoque_movimento`.`data` >= '2018-03-26 00:00:00' 
 AND `estoque_movimento`.`data` <= '2018-10-03 23:59:59' 
 ORDER BY `estoque_movimento`.`data` DESC 
)

UNION 

(
 SELECT `produto`.`nome` `nome`, `pedido_produto`.`criado_em`, `pedido_produto`.`qtde`, CONCAT("Alocado no pedido n°: ", pedido_produto.produto_id), `marca`.`nome` `marca`, `tipo_produto`.`nome` `categoria` 
 FROM `pedido_produto` 
 LEFT JOIN `pedido` ON `pedido`.`id` = `pedido_produto`.`pedido_id` 
 LEFT JOIN `produto` ON `produto`.`id` = `pedido_produto`.`produto_id` 
 LEFT JOIN `tipo_produto` ON `tipo_produto`.`id` = `produto`.`tipo_id` 
 LEFT JOIN `marca` ON `marca`.`id` = `produto`.`marca_id` 
 WHERE `pedido`.`is_finalizado` = 0 
 GROUP BY `produto`.`nome`, `pedido_produto`.`produto_id`
)

关于mysql - 如何将 UNION 与两个选择和一些 JOINS 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52637674/

相关文章:

php - 选择当前用户 MySQL PHP 的已批准评论和未批准评论

mysql - UNION All,Group BY 然后得到整体 COUNT

php - 是否可以同时查询具有更多耦合值的表?

mysql - 查询一对多对多表关系的最有效方法

php - 插入存储在数组中的所有条目(for 语句)

java - 如果所有子记录中的字段都相同,如何选择字段值

MySQL Union 总是返回一行包含 NULL 的数据

SQL Union 与 COUNT() 函数未返回预期结果

MySQL:将数组输出为单独的行

java - 尝试在 Java Web 应用程序中实现 SQL 漏洞。 Java+MySQL