实现连接表

时间:2016-10-28 23:14:33

标签: sql-server tsql junction-table

当前版本:

  • 表(BND_Listing)作为A包含商店位置信息等...

  • 表格(BND_ListingCategories),因为B包含分类A的类别

我使用查询字符串来创建"过滤器"在我的网站上根据用户选择对A进行排序的功能。我使用以下select语句填充我网站上的网格:

SELECT *
FROM   bnd_listing_testing
       RIGHT JOIN bnd_listingcategories
               ON bnd_listing_testing.catid = bnd_listingcategories.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  

我在网站上有一个基于三个选择框的表单会将城市/州/国家/地区值传递给查询字符串,上面的查询是&#34;倾听&#34;用于填充我的网格。

现在一切正常,但是我需要将多个类别归因于表A中的任何一个记录,该记录当前只是一个具有一个值的列。

我已经读过Junction Tables / Many to Many关系,并认为这是我需要走的路。我理解基本概念,但是我在更新填充网格的SELECT语句时遇到问题,以考虑我将表(BND_Junction)命名为C的Junction表。

我非常感谢你们中的任何一个例子,我可以如何操纵我的select语句来处理表C但仍然有相同的功能。

如果有任何要点需要澄清,请告诉我。

更新

我已经尝试了以下有效的查询,但为了简单起见,删除了查询字符串过滤器部分。

SELECT DISTINCT *
FROM   bnd_listingjunction
       JOIN bnd_listing
         ON bnd_listing.catid = bnd_listingjunction.catid
       JOIN bnd_listingcategories
         ON bnd_listingcategories.catid = bnd_listingjunction.catid  

1 个答案:

答案 0 :(得分:0)

SELECT *
FROM   bnd_listingjunction
       JOIN bnd_listing_testing
         ON bnd_listing_testing.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