最近我安装了MySQL 8.0.11 GA并希望优化一些视图,功能...... 通常我有这样的事情:
CREATE TABLE `PublicHoliday` (
`PublicHoliday_ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`PublicHoliday_Name` varchar(45) NOT NULL,
`CompanyGroup_ID` int(2) unsigned NOT NULL,
`Holiday` date NOT NULL,
`State_ID` int(2) unsigned NOT NULL,
PRIMARY KEY (`PublicHoliday_ID`),
UNIQUE KEY `PublicHoliday_Comb` (`CompanyGroup_ID`,`Holiday`,`PublicHoliday_Name`,`State_ID`),
CONSTRAINT `CompanyGroup_PublicHoliday` FOREIGN KEY (`CompanyGroup_ID`) REFERENCES `CompanyGroup` (`CompanyGroup_ID`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
对于MySQL 5.7我必须做类似
的事情SELECT CompanyGroup_ID,
CAST(CONCAT('[',(
GROUP_CONCAT(
DISTINCT JSON_OBJECT(
'Holiday', Holiday,
'PublicHoliday_Name', PublicHoliday_Name,
'PublicHoliday_ID', PublicHoliday_ID
)
ORDER BY Holiday ASC
)
),']') AS JSON) AS HolidayArr
FROM CompanyGroup
LEFT JOIN Holiday
USING(CompanyGroup_ID)
GROUP BY CompanyGroup_ID
现在,随着MySQL 8.0.11 GA的发布,我考虑使用JSON_ARRAYAGG()代替整个演员+ concat + group_concat,但我无法弄清楚如何设置订单或如何忽略重复的项目。有没有人知道是否有办法在JSON_ARRAYAGG()中实现任何排序或过滤?
BTW:我知道有可能在rust,php中实现这一点,但是我希望在SQL中实现这一点,以便能够在程序,函数,事件,触发器,视图中使用它。 ..答案 0 :(得分:0)
自MySQL 8.0.14起,JSON_ARRAYAGG()和其他JSON函数可在可指定顺序的窗口函数中使用。