IN выбирает соответствие одному из, а как выбрать полное соответствие?

alpha

Новичок
IN выбирает соответствие одному из, а как выбрать полное соответствие?

Есть товар. У него есть свойства. У свойств есть значения.
Вобщем упрощенно так
Table `test`
id - int - id свойства
pid - int - id товара
value - int - значение

Значения
1 1 1
1 1 4
1 1 3
2 4 1
2 1 1

Допустим что б выбрать pid, которые удовлетворяет одному из условий id=1, value=1 или id=2, value=1
SELECT pid
FROM test
WHERE
(id, val) IN ( ( 1, 1 ), ( 2, 1 ))


А как выбрать те, pid, коотрые удовлетворяют всем условиям? Тоесть и id=1, value=1 и id=2, value=1?\
Тоесть мне надо выбрать те pid где (id = 1 AND value = 1), потом те pid где (id= 2 and value = 1), и результат обьединить. Никак не пойму как сделать одним запросом.

сейчас получается такой вот некрасивый и корявый запрос

SELECT pid
FROM test
WHERE
pid IN (SELECT pid FROM test WHERE (id, val) IN ( ( 1, 1 ) )
AND
pid IN (SELECT pid FROM test WHERE (id, val) IN ( ( 2, 1 ) )
 

Gas

может по одной?
1. join таблицы с собой же
2. если id свойства для одного pid'а не повторяется, то к своему запросу добавить group by pid having count(*)=2
 

alpha

Новичок
Gas, вот никак не пойму как это сделать (
Привожу полный пример
Вобщем структура таблицы
TABLE `products_compare_parameters2products` (
`products_parameters2products_id` int(10) unsigned NOT NULL auto_increment,
`products_parameters_id` int(10) unsigned NOT NULL default '0',
`products_id` int(10) unsigned NOT NULL default '0',
`products_parameters2products_value` varchar(255) NOT NULL default ''
PRIMARY KEY (`products_parameters2products_id`),
KEY `products_id` (`products_id`),
KEY `products_parameters_id` (`products_parameters_id`,`products_id`)
)

допустим есть свойство монитора - частота, у него products_parameters_id = 1.
и свойство винта - размер, у него products_parameters_id = 2
и свойство видео - размер, у него products_parameters_id = 3

Надо выбрать все продукты у которых частота монитора 100Гц, И обьем винта 80гиг, и видео 256 метров.
Тоесть те продукты у которых есть строки где
(products_parameters_id, products_parameters2products_value) = (1, '100Гц')
и где есть строки
(products_parameters_id, products_parameters2products_value) = (2, '80гиг')
и где есть строки
(products_parameters_id, products_parameters2products_value) = (3, '256 метров')
 

Gas

может по одной?
[sql]
SELECT pid
FROM test
WHERE (id=ID1 and value=V1) OR (id=ID2 and value=V2) OR (id=ID3 and value=V3)
GROUP BY pid
HAVING COUNT(*)=3
[/sql]
можно ещё джойном сделать.
 

alpha

Новичок
а, извини, понял что ты советуешь. туго соображаю после ночи :)
ведь count(*)=3 :) спасибо.
 
Сверху