【问题标题】:SQL left joining tables with ambiguous column namesSQL 留下了列名不明确的连接表
【发布时间】:2012-10-04 22:39:42
【问题描述】:

我需要在列名不明确的查询中左连接几个表。

ListingCategory_Listings:

ID |列表类别 ID |列表ID | ..

SiteTree_Live:

ID |类名 |标题 |内容 | ..

ListingCategory:

ID |图标ID

文件:

ID |类名 |姓名 |标题 |文件名 | ..

我有疑问:

SELECT * FROM ListingCategory_Listings 
LEFT JOIN Listing ON ListingCategory_Listings.ListingID = Listing.ID 
LEFT JOIN SiteTree_Live ON Listing.ID = SiteTree_Live.ID 
LEFT JOIN ListingCategory ON ListingCategory_Listings.ListingCategoryID = ListingCategory.ID 
LEFT JOIN File ON ListingCategory.IconID = File.ID

listing和listing category数据都存储在SiteTree_Live表中,当我的记录返回时,很明显Title、ID、Content等歧义字段都在标题Title、ID、Content下返回。

我需要访问列表标题和列表类别标题以及其他特定信息。如果他们将数据存储在不同的表中,我可以使用 select Listing.Title AS lTitle 但在这种情况下我该如何做类似的事情?

【问题讨论】:

    标签: sql


    【解决方案1】:

    您需要为这些列设置别名并赋予它们不同的标签。
    您应该始终只将您需要的字段放入 SELECT 子句中,单独列出每个字段,而不是使用 *
    良好的做法还要求为每个表指定一个简短的别名。

    SELECT L.Title Listing_Title, LC.Title ListingCategory_Title,
           ... all your other columns ...
    FROM ListingCategory_Listings LCL
    LEFT JOIN Listing L ON LCL.ListingID = L.ID 
    LEFT JOIN SiteTree_Live STL ON L.ID = STL.ID 
    LEFT JOIN ListingCategory LC ON LCL.ListingCategoryID = LC.ID 
    LEFT JOIN File F ON LC.IconID = F.ID
    

    【讨论】:

      【解决方案2】:

      我建议给 ALIAS 一个 COLUMN 名称,之前的信息可​​能不正确。

      COLUMN ALIAS 的正确语法是:

      SELECT column_name AS alias_name
      FROM table_name;
      

      COLUMN ALIAS 中,COLUMN 别名分配在正确的 COLUMN 名称旁边声明。

      TABLE ALIAS 的正确语法是:

      SELECT column_name(s)
      FROM table_name AS alias_name;
      

      TABLE ALIAS 中,TABLE 别名放在语句的 SELECT 部分中选择的列旁边。 TABLE ALAIS 分配是在语句的 FROM 部分中进行的。

      不同之处在于别名分配是在想要别名的正确名称旁边进行的!

      我在 Fraser 提供的示例上建立了一个实践,它对我有用。我相信所提供的答案是关于 TABLE ALIAS,而不是 COLUMN ALIAS。

      我不同意 ALIAS 的用法,因为 TABLE 或 COLUMN ALIAS 太短以至于使代码的可读性复杂化。我相信它应该很短,但不能太短以至于代码不是出于维护目的而“自我记录”。这是我的 2 美分想法!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-08
        • 1970-01-01
        • 2018-09-14
        相关资源
        最近更新 更多