sql – 你可以没有ON关键字的INNER JOIN吗?

前端之家收集整理的这篇文章主要介绍了sql – 你可以没有ON关键字的INNER JOIN吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在调试一些Oracle代码时,我遇到了这个查询
SELECT TPM_TASK.TASKID FROM TPM_GROUP 
INNER JOIN TPM_USERGROUPS ON TPM_GROUP.GROUPID = TPM_USERGROUPS.GROUPID 
INNER JOIN TPM_TASK
INNER JOIN TPM_GROUPTASKS ON TPM_TASK.TASKID = TPM_GROUPTASKS.TASKID 
INNER JOIN TPM_PROJECTVERSION ON TPM_TASK.PROJECTID = TPM_PROJECTVERSION.PROJECTID AND TPM_TASK.VERSIONID = TPM_PROJECTVERSION.VERSIONID 
INNER JOIN TPM_TASKSTAGE ON TPM_TASK.STAGEID = TPM_TASKSTAGE.STAGEID 
INNER JOIN TPM_PROJECTSTAGE ON TPM_PROJECTVERSION.STAGEID = TPM_PROJECTSTAGE.STAGEID 
ON TPM_GROUP.GROUPID = TPM_GROUPTASKS.GROUPID

我感到困惑的是:

INNER JOIN TPM_TASK

之前没有看到没有ON子句的JOIN.还有混淆的是:

ON TPM_GROUP.GROUPID = TPM_GROUPTASKS.GROUPID

这似乎是一个随机的ON子句,没有任何匹配的JOIN.该查询运行没有任何错误,并返回一堆数据,所以明显的语法是完全有效的.有人可以清楚地知道这里发生了什么吗?

解决方法

小宇宙…我昨天跑过一个生成这个句法的工具,相当浮躁.

显然,

FROM a 
     INNER JOIN b
     INNER JOIN c ON (b.id = c.id)
     ON (a.id = c.id)

相当于一个嵌套子查询

FROM a
     INNER JOIN (SELECT <<list of columns>>
                   FROM b
                        INNER JOIN c ON (b.id=c.id)) c
             ON (a.id = c.id)

猜你在找的MsSQL相关文章