【发布时间】:2017-03-12 21:04:57
【问题描述】:
我正在使用以下 select 语句在我的网站上填充已输入 3 个表的列表的网格。
BND_Listing = Main Data
BND_ListingCategories = My Category data for the Listing Table
BND_LingingJunction = Junction Table for multi-category listings.
我刚刚实现了 Junction 表,因为任何列表都可以有超过 1 个类别,但是当我有(使用 CategoryY 和 CategoryZ 的列表 X)时,我的问题出现了,因为 CatX 和 CatY 会在我的列表中显示两次在我的联结表上这个特定列表有 2 个条目,所以我理解为什么它会显示两次,但我希望所有内容都只显示一次,而不是每个类别显示一次。
SELECT DISTINCT * FROM BND_ListingJunction
JOIN BND_listing on BND_listing.LID = BND_ListingJunction.Junc_LID
JOIN BND_ListingCategories
on BND_ListingCategories.CatID =
BND_ListingJunction.Junc_CatID
WHERE (CategoryName = '[querystring:filter-Category]' or
'[querystring:filter-Category]'='All')
and (City = '[querystring:filter-City]' or
'[querystring:filter-City]'='All')
and (Region= '[querystring:filter-State]' or
'[querystring:filter-State]'='All')
and (Country= '[querystring:filter-Country]' or
'[querystring:filter-Country]'='All')
and isnull(Company,'') <> ''
ORDER by Company ASC
我意识到使用 distinct 在这里不起作用,因为它是从我的联结表中提取的第一个,也许查询需要以不同的方式组织?
【问题讨论】:
-
因为 distinct 应用于查询的每个输出列。
-
@CharlesBretana 那么这是否意味着我也对我的 JOINS 应用了 distinct ?
-
不,请参阅我编辑的答案。 Distinct 应用于整个查询的最终输出。如果考虑到整个输出(所有列),存在任何相同的行(所有列值都相同),则消除额外的重复项。您的查询从查询中的所有表中选择了所有内容,因此由于每个类别的类别值不同,因此这些行是不同的并且不会被消除。您需要将输出限制为仅列出列表中的列。您可以明确列出您想要的列,或使用子查询。
标签: sql-server tsql join outer-join