我已经创建了一个列表页面,其中有3个表
BND_Listing BND_ListingCategories BND_ListingJunction
联结表包含ListingID& CategoryID用于匹配哪些列表属于哪些类别。
我使用以下select语句将这3个表中的数据提取到我网站上的网格中。
SELECT DISTINCT l.*, c.CategoryName
FROM BND_Listing l
Join BND_ListingJunction j
on j.Junc_LID = l.LID
join BND_ListingCategories c
on c.CatId = j.Junc_CatID
Where (c.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 l.Company, l.LID
以下查询工作正常,但由于我在多个类别中列出了一些列表,因此我的网格上的每个类别都会重复列表。
我希望一次只显示1个唯一列表,即使它们可能属于多个类别。
我不知道如何做到这一点。我有另一篇文章解释我是如何做到这一点的。 Eliminate duplicates in Join over 3 Tables
任何例子,洞察力都赞赏!
答案 0 :(得分:1)
最简单的方法是从SELECT
:
SELECT DISTINCT l.*
另一种方法是保留单身人士的类别名称,并显示'Multiple'
倍数:
SELECT l.company, l.LID, . . .,
(CASE WHEN MIN(c.CategoryName) = MAX(c.CategoryName) THEN MIN(c.CategoryName)
ELSE 'Multiple'
END) as CategoryName
FROM . . .
GROUP BY l.company, l.LID, . . .;
这很容易扩展到显示两个不同的类别,其中'More than 2'
为倍数。
更痛苦的方法是将类别连接在一起。