【问题标题】:Two joins between two tables两个表之间的两个连接
【发布时间】:2013-08-06 04:03:19
【问题描述】:

我有两张表存储地址如下:

我想获取每个地址、城市、名称和地区名称(cityId,Areaaid 可能为空)

我试过了:

SELECT [Details]
      ,[AddressId]
      ,[CityId]
      ,[PlaceName] as CityName
      ,[AreaId]
      ,[PlaceName] as AreaName
  FROM [MyDB].[dbo].[Address] LEFT OUTER JOIN [MyDB].[dbo].[Places]
  ON [CityId] = [PlaceI]  

但这只会给我城市的名称。也如何获得区域名称?

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    试试这个

    SELECT [Details]
          ,[AddressId]
          ,[CityId]
          ,C.[PlaceName] as CityName
          ,[AreaId]
          ,A.[PlaceName] as AreaName
    FROM [MyDB].[dbo].[Address] 
         INNER JOIN [MyDB].[dbo].[Places] C
         ON ([CityId] = [PlaceID] AND IsCity=1)
         OR  ([AreaId] = [PlaceID] AND IsCity=0)
    

    【讨论】:

      【解决方案2】:

      添加另一个连接

      SELECT [Details]
            ,[AddressId]
            ,[CityId]
            ,p1.[PlaceName] as CityName
            ,[AreaId]
            ,p2.[PlaceName] as AreaName
        FROM [MyDB].[dbo].[Address] 
        LEFT OUTER JOIN [MyDB].[dbo].[Places] p1 ON [CityId] = p1.[PlaceId]  
        LEFT OUTER JOIN [MyDB].[dbo].[Places] p2 ON [AreaId] = p2.[PlaceId] 
      

      【讨论】:

      • 你有两次完全相同的连接条件。应该加入AreaId
      【解决方案3】:

      是否会在同一个表中添加另一个联接...这次加入区域 ID 是否有效? (其他答案已插入,因此不添加查询)

      如果可能的话,您可能希望在地方添加另一列以加入区域 id 或放入第三个表以摆脱多对多关系

      【讨论】:

        【解决方案4】:

        您需要使用 Places 表加入两次。一次用于城市,一次用于地区。

        SELECT [Details]
              ,[AddressId]
              ,[CityId]
              ,C.[PlaceName] as CityName
              ,[AreaId]
              ,A.[PlaceName] as AreaName
        FROM [MyDB].[dbo].[Address] 
             LEFT OUTER JOIN [MyDB].[dbo].[Places] C
                 ON [CityId] = C.[PlaceI] 
             LEFT OUTER JOIN [MyDB].[dbo].[Places] A
                 ON [AreaId] = A.[PlaceI] 
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-10-15
          • 2012-04-25
          • 1970-01-01
          • 1970-01-01
          • 2017-01-23
          • 2014-02-15
          • 2019-02-25
          • 1970-01-01
          相关资源
          最近更新 更多