如何使用SELECT CONCAT()在MYSQL中打印消息?

如何使用SELECT CONCAT()在MYSQL中打印消息?,mysql,Mysql,我需要编写一个SQL脚本,将违反一致性约束的示例数据库内容的相关信息插入到关系表AUDIT\u中: "A passenger cannot book two or more different flights in the same day." 脚本必须将一致性约束的验证结果列为单列表,并将以下消息列为表中的行 例如,如果出生于1985年2月20日的乘客ABC预订了两个航班,一个航班是Q123,在2020年5月20日10:30从悉尼起飞,另一个航班是JS213,在2020年

我需要编写一个SQL脚本,将违反一致性约束的示例数据库内容的相关信息插入到关系表AUDIT\u中:

"A passenger cannot book two or more different flights in the same day."
脚本必须将一致性约束的验证结果列为单列表,并将以下消息列为表中的行

例如,如果出生于1985年2月20日的乘客ABC预订了两个航班,一个航班是Q123,在2020年5月20日10:30从悉尼起飞,另一个航班是JS213,在2020年5月20日12:30从悉尼起飞,则一致性约束的验证必须返回以下消息:

A passenger ABC, dob is 1985-02-20, has booked tickets for flights Q123 and JS213, departure at 2020-05-20 10:30 and at 2020-05-20 12:30 in the same day.
                                               
我需要使用CONCAT函数来创建上面列出的消息

当我尝试这样做时,结果返回为:

Error Code: 1055. Expression #1 of SELECT list is not in GROUP BY clause and
contains nonaggregated column 'csit115.BOOKING.departTime' which is not 
functionally dependent on columns in GROUP BY clause; this is incompatible
with sql_mode=only_full_group_by    0.00025 sec
以下是我到目前为止的情况:

SELECT CONCAT("A passenger ", name, " dob is ", DOB, " has booked tickets for flights ", flightNumber, ' departing at ', departTime, " and ", 
flightNumber, ' departing at ', departTime, " in the same day.", 
GROUP_CONCAT(CONCAT(flightNumber, ' departing at ', departTime), ' and also'))
FROM BOOKING
GROUP BY name, DOB, flightNumber, DATE(departTime)
HAVING COUNT(flightNumber)>=2;

SELECT MESSAGE
FROM AUDIT_BOOKING;
Any help with this would be greatly appreciated!

结果为空,因为没有行满足条件;您的航班必须具有相同的航班号,并在同一分钟起飞,这样才能计数(*)2次,因为您根据航班号和日期(包括时间)分组

更改您的分组,使其完全不按航班号分组,而是按
日期(出发时间)
分组,而不仅仅是
出发时间

编辑:对不起,我以为我们在“计数=2”。如果您期望可变的多个航班列表(因此,您需要执行以下操作):

SELECT CONCAT('... name ... dob ... etc ...', GROUP_CONCAT(CONCAT(flightNumber, ' departing at ', departTime) SEPARATOR ' and also ')))
这将列出所有航班,并在名称/dob位后用“and”分隔。如果你绝对坚持说出航班号列表,然后再说出日期列表的想法,那么可以多次使用group concat;建议使用order by(这将大大延长查询时间),类似于
concat(“航班号”组(按起飞时间排列的航班号顺序,航班号分隔符“,”),“起飞时间”,组(按起飞时间排列的起飞时间顺序,航班号分隔符“,”)


请注意,“同一天”的概念是相当人工的;一个人不可能在23:59坐飞机去洛杉矶,也不可能在第二天00:01坐飞机去孟买。你可能希望以后使用类似于
window w OVER的窗口功能(按名称划分,按部门划分dob顺序ASC范围在前一天和当前行之间)
因此,对于每一行,DB都会回顾过去的24小时,并统计该窗口中该人员的航班数量。如果您统计该窗口,您可以只选择计数大于1的航班,这将比在午夜进行此硬切换更复杂(“24小时内超过1次航班”)/“同一天的航班”-见《小提琴手》中的威尔,他在午夜前后两次航班间隔2分钟

你真的要使用MySQL命令行界面作为用户终端吗?我看不出这样的插入有什么有用的用途。
flightNumber“,以及“,flightNumber,
-这部分连接的数据必须替换为
组\u CONCAT(flightNumber分隔符“”和“”)
flightNumber
必须从GROUP BY expression中排除。我执行此操作并收到此错误消息:错误代码:1136。第1行的列计数与值计数不匹配0.00069秒删除查询的插入部分;首先获取select working。我们可以稍后获取列计数(您正在选择一个列,并试图将其插入一个包含多个列的表中,但未指定哪一列)好的,这运行了,但没有返回任何内容如果没有人在同一天乘坐3次航班,则该消息适用于在同一天乘坐2次或更多航班的人