2

我需要在列名不明确的查询中加入几个表。

ListingCategory_Listings:

身份证 | 列表类别 ID | 列表ID | ..

SiteTree_Live:

身份证 | 类名 | 标题 | 内容 | ..

上市类别:

身份证 | 图标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

列表和列表类别数据都存储在 SiteTree_Live 表中,当返回我的记录时,显然在标题 Title、ID、Content 下返回了 Title、ID、Content 和其他模棱两可的字段。

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

4

2 回答 2

18

您需要给列起别名并给它们不同的标签。
您应该始终只将您需要的字段放入 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
于 2012-10-14T23:10:40.897 回答
1

我建议给 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 部分中进行的。

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

我在弗雷泽提供的示例上建立了一个练习,它对我有用。我相信提供的答案是关于表别名,而不是列别名。

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

于 2015-11-22T19:04:48.637 回答