根据n:m表标准过滤记录

时间:2011-03-30 14:59:48

标签: sql tsql join where

我有表product

 ID int 
 name nvarchar()

 dummy data: (1,'car'), (2,'bike')

我有表parameters

 ID int
 name nvarchar()

 dummy data: (1,'abs'), (2,'audio'), (3,'eps'), (4,'air conditioning')

最后我有n:m table product_parameters,其中包含有关产品参数的信息。

 ID int
 id_product int
 id_parameter int

 dummy data: 

 (id,product,parameter)
 (1, 1, 1), 
 (2, 1, 2), 
 (3, 1, 3),
 (4, 2, 1)

如何创建选择:

  1. 显示所有参数未在搜索中定义
  2. 显示汽车和自行车因为它们都有参数abs
  3. 仅显示汽车,因为它搜索abs,eps,audi
  4. 有可能吗?

    更新

    我只创建了3个参数但是把它想象成无限数量,无论是10,20或30还是更多...基本上有一种方法可以建立选择,以便在需要时查询一个参数或20参数如果需要。

1 个答案:

答案 0 :(得分:0)

首先:

SELECT * FROM product PR
JOIN product_parameters PP ON PR.ID=PP.id_product
JOIN parameters PA ON PP.id_parameter=PA.ID

第二

SELECT PR.* FROM product PR
JOIN product_parameters PP ON PR.ID=PP.id_product
JOIN parameters PA ON PP.id_parameter=PA.ID
WHERE PA.name = 'abs'

第三

SELECT PR.* FROM product PR
WHERE EXISTS (SELECT * FROM product_parameters PP JOIN parameters PA ON PP.id_parameter=PA.ID WHERE PP.id_product=PR.ID AND PA.name='abs')
AND EXISTS (SELECT * FROM product_parameters PP JOIN parameters PA ON PP.id_parameter=PA.ID WHERE PP.id_product=PR.ID AND PA.name='eps')
AND EXISTS (SELECT * FROM product_parameters PP JOIN parameters PA ON PP.id_parameter=PA.ID WHERE PP.id_product=PR.ID AND PA.name='audi')