MySQL中Cross join与Alias使用的语法错误问题咨询
MySQL中Cross join与Alias使用的语法错误问题咨询
嘿,我来帮你捋捋这个语法错误的问题~你的查询里的问题其实出在子查询的别名写法上,咱们拆开来看看:
你写的这段SQL:
select g1.*, g2.* from (select * from Customer where referee_id is not null) Logs g1, Logs g2
这里的问题是:给子查询起别名的时候,你多写了一个Logs。子查询的正确别名写法是直接在括号后面跟别名就好,不需要额外加原表名。你本来想把筛选后的子查询结果别名成g1,但错误地写成了Logs g1——MySQL完全没法理解你同时给子查询指定两个标识符,自然就报错啦。
正确的写法应该是这样的:
select g1.*, g2.* from (select * from Customer where referee_id is not null) g1, Logs g2
另外更推荐你用显式的CROSS JOIN写法(隐式逗号连接的写法可读性差,还容易不小心写错关联条件):
select g1.*, g2.* from (select * from Customer where referee_id is not null) g1 cross join Logs g2
你问能不能把Logs别名成g1和g2?当然可以!不过要注意:你第一个g1是子查询的别名(对应筛选后的Customer表数据),第二个g2是原Logs表的别名,这俩是不同的数据源哦。如果是针对你后来提到的赛事得分表做自连接查询(比如对比同一参与者在同一赛事的多次得分),只要给同一张表起不同别名就行,举个例子:
-- 示例:找出同一参与者在同一赛事中的不同得分记录 select t1.participant_name, t1.event_id, t1.score as 首次得分, t2.score as 其他得分 from event_scores t1 join event_scores t2 on t1.participant_name = t2.participant_name and t1.event_id = t2.event_id and t1.score != t2.score
这种写法完全合法,只要两个别名不重复就没问题。
备注:内容来源于stack exchange,提问作者gollapudi sravani
相关产品推荐
相关产品推荐

