SQL使用不明确的列名连接表

时间:2012-10-14 23:09:43

标签: sql

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

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但是如何在这种情况下做类似的事情?

2 个答案:

答案 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名称,以前的信息可​​能不正确。

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部分中进行。

不同之处在于,别名分配是在希望得到的ALIASED的正确名称旁边进行的!

我在弗雷泽提供的示例中设置了一个练习&它对我有用。我相信所提供的答案是关于TABLE ALIAS,而不是COLUMN ALIAS。

我不同意ALIAS的用法,其中TABLE或COLUMN ALIAS太短,以至于它使代码的可读性变得复杂。我认为它应该简短,但不能太短,以至于代码不是出于维护目的而“自我记录”。这是我2的想法!