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 ) )
Есть товар. У него есть свойства. У свойств есть значения.
Вобщем упрощенно так
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 ) )