我需要在查询中连接几个表,其中列名不明确。
ListingCategory_Listings:
ID | ListingCategoryID | ListingID | ..
SiteTree_Live:
ID | ClassName |标题|内容| ..
ListingCategory:
ID | IconID
文件:
ID | ClassName |名称|标题|文件名| ..
我有查询:
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表中,当我的记录被返回时,显然标题,ID,内容和其他不明确的字段将在标题,ID,内容标题下返回。
我需要访问列表标题和列表类别标题以及其他特定信息。如果他们将数据存储在不同的表中,我可以使用select Listing.Title AS lTitle但是如何在这种情况下做类似的事情?
答案 0 :(得分:16)
您需要为列添加别名并为其指定不同的标签
您应该始终只将所需的字段放入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
答案 1 :(得分:1)
我建议ALIAS是一个COLUMN名称,以前的信息可能不正确。
SELECT column_name AS alias_name
FROM table_name;
在 COLUMN ALIAS 中,COLUMN别名分配在适当的COLUMN名称旁边声明。
SELECT column_name(s)
FROM table_name AS alias_name;
在 TABLE ALIAS 中,TABLE别名放在语句的SELECT部分中所选列的旁边。 TABLE ALAIS赋值在语句的FROM部分中进行。
不同之处在于,别名分配是在希望得到的ALIASED的正确名称旁边进行的!
我在弗雷泽提供的示例中设置了一个练习&它对我有用。我相信所提供的答案是关于TABLE ALIAS,而不是COLUMN ALIAS。
我不同意ALIAS的用法,其中TABLE或COLUMN ALIAS太短,以至于它使代码的可读性变得复杂。我认为它应该简短,但不能太短,以至于代码不是出于维护目的而“自我记录”。这是我2的想法!