StackOverflow 上有一些关于连接交换性的讨论,例如1、2、3和4。它变得非常复杂,我认为他们中的任何一个都不能在这里回答我的问题。
我经常注意到,当我将查询的 SQL 放入 Access 时,Access 会弄乱我的联接顺序,甚至将LEFT
联接更改为联接RIGHT
。我通常将外连接写为LEFT
s,按逻辑排列连接表的顺序,所以当 Access 搞砸时我不喜欢它。但是现在我注意到查询在设计视图中的表示方式有所不同,我想知道这种差异是否显着。
以下是三个查询:
查询1
SELECT Table1.ID_Table1
FROM Table2 RIGHT JOIN (Table1 LEFT JOIN Table12
ON Table1.ID_Table1 = Table12.ID_Table1) ON Table2.ID_Table2 = Table12.ID_Table2;
查询2
SELECT Table1.ID_Table1
FROM Table1 LEFT JOIN (Table2 RIGHT JOIN Table12
ON Table2.ID_Table2 = Table12.ID_Table2) ON Table1.ID_Table1 = Table12.ID_Table1;
查询3
SELECT Table1.ID_Table1
FROM Table1 LEFT JOIN (Table12 LEFT JOIN Table2
ON Table12.ID_Table2 = Table2.ID_Table2) ON Table1.ID_Table1 = Table12.ID_Table1;
我更喜欢 Query3,因为它具有我提到的逻辑顺序。
当我将这些查询作为 SQL 输入时,Access 将 Query2 的代码更改为与 Query1 相同,并且没有修改 Query1 或 Query3 的代码。当运行这三个查询时(使用非常简单的数据,因此不是结论性的),它们都会产生相同的结果。在设计视图中,Query1 和 Query2 看起来相同,这很好,因为 Access 将 Query2 转换为 Query1。Query3 看起来几乎一样,只是 Table2 和 Table12 之间的关系在 Query1 的视图中表示,而 Query2 在 Query3 的视图中没有表示。
所以我的问题是,Query3 是否等同于 Query1 和 Query2,因此可以安全地忽略设计视图中表关系表示的丢失,或者查询中是否存在操作差异?如果存在差异,是否有连接排序的指导原则?