Мне нужно получить только product_price_id, который соответствует всем переданным идентификаторам.
Учитывая следующую таблицу:
id attribute_id(uuid) product_price_id(uuid)
1 004f92e8-34ca-4518-bfea-aef9abf07994 6fdcc85d-6fca-44c8-bb04-7b94bfc57294
2 b2122096-a886-4bab-9a2b-8e237c59460a 0e5bf36f-6e78-474f-a7f5-a77377ccb466
3 004f92e8-34ca-4518-bfea-aef9abf07994 0e5bf36f-6e78-474f-a7f5-a77377ccb466
...
Мне нужно вернуть product_price_id, где совпадает attribute_id.Должно быть возвращено только одно значение, или, если не найдено, возвращаемое значение NULL.
Если предложение where имеет только 004f92e8-34ca-4518-bfea-aef9abf07994
для attribute_id, мне нужно вернуть только 6fdcc85d-6fca-44c8-bb04-7b94bfc57294
, а не 0e5bf36f-6e78-474f-a7f5-a77377ccb466
Если в предложении where есть 004f92e8-34ca-4518-bfea-aef9abf07994
и b2122096-a886-4bab-9a2b-8e237c59460a
для attribute_id, мне нужно вернуть 0e5bf36f-6e78-474f-a7f5-a77377ccb466
Это может быть n количеством комбинаций, а не просто 1 или два, каждый раз пройденные.
Я пытался:
SELECT product_price_id
FROM product_override_pricing t
WHERE t.attribute_id IN ('004f92e8-34ca-4518-bfea-aef9abf07994', 'b2122096-a886-4bab-9a2b-8e237c59460a')
GROUP BY product_price_id
HAVING COUNT(1) = 2;
Что, кажется, работает, если я передаю 2 значения в предложении where.
Но когда я передаю одно значение, я получаю 2 результата:
SELECT product_price_id
FROM product_override_pricing t
WHERE t.attribute_id IN ('004f92e8-34ca-4518-bfea-aef9abf07994')
GROUP BY product_price_id, attribute_id
HAVING COUNT(1) = 1;
Я пробовал что-то подобное только для целей тестирования
SELECT * FROM product_override_pricing as s
WHERE NOT EXISTS (( SELECT '004f92e8-34ca-4518-bfea-aef9abf07994' UNION SELECT 'b2122096-a886-4bab-9a2b-8e237c59460a' )
EXCEPT
(SELECT sp.product_price_id FROM product_override_pricing sp WHERE sp.product_price_id = s.product_price_id ) );
Но я получил следующую ошибку: EXCEPT types text and uuid cannot be matched