У меня есть метод Java, который получает список строк в качестве параметра, и я хочу получить строки, которые точно соответствуют всем значениям списка (не больше, не меньше).
У меня есть две таблицы (таблица дел и таблица товаров), которая имеет отношение многие ко многим.
CASES_TABLE
ID CASES_COMMENT ...
1 Some comment ...
2 Some comment2 ...
3 Some comment3 ...
... ...
PRODUCTS_TABLE
ID PRODUCT_CODE
1 VoIP
2 IPTV
3 PSTN
... ...
CASES_PRODUCTS_TABLE
CASE_ID PRODUCT_ID
1 1
2 1
2 2
2 3
3 1
3 2
... ...
Я использую Oracle в качестве rdbms.
Например:
Given the list:
List<String> products = Stream.of("VoIP", "IPTV","PSTN").collect(Collectors.toList());;
и метод
Строка getSomeValue (Список продуктов);
То, что я хотел бы получить, это случай с идентификатором 2, потому что это тот, который точно соответствует всем значениям (не случай с идентификатором 1, потому что он соответствует только одному значению, а не случай с идентификатором 2). потому что он соответствует только двум значениям).
Я читал о реляционном делении, но думаю, что это не решит мою проблему. Я также пробовал с условием IN, но оно выполняет 'ИЛИ', и я хочу, чтобы мой запрос фильтровал точно по всем значениям, не оставляя ни одного левого или получая строку, у которой есть значение, которого нет в списке.
Я попробовал следующее:
SELECT CASES_COMMENT
FROM CASES_TABLE CT JOIN CASES_PRODUCTS_TABLE CPT
ON CT.ID = CPT.CASE_ID
JOIN PRODUCTS_TABLE
ON PT.ID = CPT.PRODUCT_ID
WHERE PRODUCT_CODE IN ('VoIP', 'PSTN', 'IPTV');