【问题标题】:Multiple inner join on same table同一张表上的多个内连接
【发布时间】:2016-08-26 09:45:56
【问题描述】:

我有三张桌子: 表一

UID
SellID
BuyID
SAMonth

表 B

ID
ZipCode

表 C

Zip Code
Latitude 
Longitude 

现在我必须找到两个 ID 之间的距离

首先,我有 UID,基于该 UID,我尝试使用以下代码获取与每个 ID 对应的两个邮政编码。

Select t1.UID,t1.SellID,z1.ZipCode, t1.BuyID, z2.ZipCode , SAMonth 
from tableA t1
inner join tableB z1 on t1.SellID Like z1.ID 
inner join tableB z2 on t1.BuyID Like z2.ID 
where Criteria

此代码有什么问题,当我添加第二个内部联接时,我在此遇到语法错误。还有如何使用这个 Zip 来获取两个 ID 的纬度和经度

由于格式的不同,它与 Like Keyword 一起使用。添加括号后它的工作。如何扩展到第三张表

【问题讨论】:

标签: sql ms-access


【解决方案1】:

您需要将其中一个连接放入括号中,例如

Select t1.UID,t1.SellID,z1.ZipCode, t1.BuyID, z2.ZipCode , SAMonth 
  from ( tableA t1
         inner join tableB z1 on t1.SellID Like z1.ID )
         inner join tableB z2 on t1.BuyID Like z2.ID 
 where Criteria

这迫使您编写的顺序仅用于解析目的,优化器将使用它确定为最佳的任何顺序。

正如其他人所指出的,您的数据元素名称 (ID) 建议您应将 like 替换为 =(等于)。

添加第三个表涉及添加进一步级别的括号嵌套,例如

from ( ( tableA t1
         inner join tableB z1 on t1.SellID Like z1.ID )
         inner join tableB z2 on t1.BuyID Like z2.ID )
         inner join tableC z3 on z1.ZipCode = z3.ZipCode

【讨论】:

    【解决方案2】:

    like 替换为 = 相等比较

    inner join tableB z1 on t1.SellID = z1.ID 
    inner join tableB z2 on t1.BuyID = z2.ID 
    

    【讨论】:

      【解决方案3】:
      Select t1.UID,t1.SellID,z1.ZipCode, t1.BuyID, z2.ZipCode , t1.SAMonth 
      from tableA t1
      inner join tableB z1 on t1.SellID = z1.ID 
      inner join tableB z2 on t1.BuyID = z2.ID 
      

      【讨论】: