2010-05-19 1 views
1

Привет У меня есть таблица, которая выглядит, как этотMySQL выберите помощь

id : productid : featureid 
(1, 1, 16) 
(2, 1, 21) 
(3, 1, 25) 
(4, 2, 16) 
(5, 2, 21) 
(6, 2, 27) 

где FeatureId является внешним ключом к другой таблице.

Мне нужно выбрать продукты, которые имеют оба признака 16 и 25, в примере это будет productid 1, но не productid 2.

Может ли кто-нибудь показать мне пример форматирования этого запроса?

ответ

1

Я не понял последнее утверждение о «productid 1, но не productid 2».

Я не проверял этот код, но вы можете сделать что-то вроде этого:

SELECT a.* FROM `products` AS a INNER JOIN `products` AS b ON (a.`productid` = b.`product_id` WHERE `featureid` = 25) WHERE a.`featureid` = 16 

или

SELECT * FROM `products` WHERE `featureid` = 16 AND `product_id` IN (SELECT `productid`FROM `products` WHERE `featureid` = 25) 
+0

Я имел в виду, что инструкция приведет к продукту 1, поскольку у него есть оба признака 16 и 25 – user344766

2

Чтобы получить все продукты, которые имеют обе эти функции, вы можете использовать суб- запрос, а затем используйте Group By с Having -clause, чтобы возвращать только те продукты, у которых есть обе функции (при условии, что productId, featureId уникален в вашей таблице).

Select productId 
From (
    Select productId 
    From your_table 
    Where featureId In (16, 25) 
) 
Group By productId 
Having Count(*) = 2