фильтрация записей по критериям таблицы n: m - PullRequest
0 голосов
/ 30 марта 2011

У меня есть таблица 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 таблица product_parameters, которая содержит информацию о параметрах дляproduct.

 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)

Как создать select, который:

  1. показывает, что все параметры не определены в поиске
  2. показывает автомобиль и велосипед, потому что они оба имеютпараметр abs
  3. показывает только автомобиль, потому что он ищет abs, eps, audi

Возможно ли это?

UPDATE

Я создал только 3 параметра, но думаю, что это неограниченное число, будь то 10, 20 или 30 или более ... в принципе, есть ли способ, как построить выборку таким образом, чтобы он запрашивал один параметр, если необходимо, или 20 параметровесли нужно.

1 Ответ

0 голосов
/ 30 марта 2011

Первый:

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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...