繁体   English   中英

使用UNION ALL保存结果

[英]Preserving results with UNION ALL

我有一个使用UNION ALL关键字创建的查询。 问题是,当SELECT之一返回空集时,它将被丢弃。 我需要它至少返回NULL或空行。

如果您对每个SELECT都有唯一的索引,我会在某处阅读,这样可以防止丢弃,但是它不起作用。

查询是通过循环创建的,因此日期索引 (即“ 2013年6月”)发生了变化,仅显示了一个选择。

SELECT `products`.`id`, `products`.`ugid`, CONCAT(`products`.`fsg_pre`, `products`.`fsg_suff`) AS `fsg`, `year`, 'Mar' AS `month`, '2012-Mar' AS `index`, `Mar` AS `price`
FROM `prices`
JOIN `products`
ON (`products`.`uuid` = `prices`.`uuid`)
WHERE TRUE
AND `products`.`ugid` = '52777'
AND `products`.`fsg_pre` = 'SU'
AND `products`.`fsg_suff` = '3'
AND `year` = 2012

UNION ALL
[..........]

为什么不按照IMSoP的建议使用LEFT JOIN,例如:

SELECT `products`.`id`, `products`.`ugid`, CONCAT(`products`.`fsg_pre`,
`products`.`fsg_suff`) AS `fsg`, `year`, 'Mar' AS `month`, '2012-Mar' AS `index`, 
`Mar` AS `price`
 FROM `prices`
 LEFT JOIN `products`
 ON `products`.`uuid` = `prices`.`uuid`
 WHERE `products`.`ugid` = '52777'
 AND `products`.`fsg_pre` = 'SU'
 AND `products`.`fsg_suff` = '3'
 AND `year` = 2012

或FULL JOIN以使行始终为空或不为空。

 SELECT `products`.`id`, `products`.`ugid`, CONCAT(`products`.`fsg_pre`,
`products`.`fsg_suff`) AS `fsg`, `year`, 'Mar' AS `month`, '2012-Mar' AS `index`, 
`Mar` AS `price`
 FROM `prices`
 FULL JOIN `products`
 ON `products`.`uuid` = `prices`.`uuid`
 WHERE `products`.`ugid` = '52777'
 AND `products`.`fsg_pre` = 'SU'
 AND `products`.`fsg_suff` = '3'
 AND `year` = 2012

请参阅此处的链接以直观地了解JOIN的工作原理。

暂无
暂无

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

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