gpt4 book ai didi

mysql - JOIN 语句中的多个 "ON"如何工作

转载 作者:行者123 更新时间:2023-11-29 01:29:45 25 4
gpt4 key购买 nike

我目前正在读取一个在连接表时通常不会在其他一些查询中看到的查询。

SELECT 
*
FROM table_1
RIGHT OUTER JOIN table_2
INNER JOIN table_3
ON table_2.some_id = table_3.some_id
RIGHT OUTER JOIN table_4
ON table_3.some_id = table_4.some_id
LEFT OUTER JOIN table_5
ON table_4.some_id = table_5.some_id
ON table_1.some_id = table_4.some_id

请不要介意这些表是如何连接的。我只想知道该查询是如何工作的?提前谢谢你。

最佳答案

我认为 SQL Server 文档比 MySQL 更能捕捉到正在发生的事情。 (Here 是文档。)

正如 Laurence 所观察到的,这是一个解析问题。您可以通过查看 from 的语法图来了解是什么。陈述。有一个大多数人(包括我)从来没有想过的递归引用。联接表具有以下语法:

<joined_table> ::= 
{
<table_source> <join_type> <table_source> ON <search_condition>
| <table_source> CROSS JOIN <table_source>
| left_table_source { CROSS | OUTER } APPLY right_table_source
| [ ( ] <joined_table> [ ) ]
}

这里的关键是第一 block ,<table_source> <join_type> <table_source> .好吧,猜猜看,table_source可以是 joined_table (以及其他一些东西)。这意味着语法:

A join B join C ON <condition1> ON <condition2>

符合上面的语法并解释为:

A join (B join C on <condition1>) ON <condition2>

也就是表达式B join C on <condition1>被视为“table_source”。

我的猜测是,如果 SQL Server 和 MySQL 都这样做,那么它可能是标准的一部分。但是,该标准比 SQL Server 的语法图更难理解。

关于mysql - JOIN 语句中的多个 "ON"如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19759986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com