Vous n'avez pas besoin de rejoindre t1
et vous avez besoin COUNT(DISTINCT column_name)
:
SQL Fiddle
Oracle 11g R2 schéma configuration:
CREATE TABLE t2 (ID, T1_ID, Value) AS
SELECT 1, 1, 'Apple' FROM DUAL UNION ALL
SELECT 2, 1, 'Orange' FROM DUAL UNION ALL
SELECT 3, 1, 'Kiwi' FROM DUAL UNION ALL
SELECT 4, 2, 'Orange' FROM DUAL UNION ALL
SELECT 5, 2, 'Kiwi' FROM DUAL UNION ALL
SELECT 6, 3, 'Pear' FROM DUAL UNION ALL
SELECT 7, 3, 'Berry' FROM DUAL UNION ALL
SELECT 8, 3, 'Orange' FROM DUAL UNION ALL
SELECT 9, 4, 'Apple' FROM DUAL UNION ALL
SELECT 10, 5, 'Apple' FROM DUAL UNION ALL
SELECT 11, 5, 'Apple' FROM DUAL UNION ALL
SELECT 12, 5, 'Kiwi' FROM DUAL;
Requête 1:
select t1_id,
LISTAGG(value, ',') WITHIN GROUP (ORDER BY value) As "values"
from t2
where value in ('Apple','Orange','Kiwi')
group by t1_id
having count(DISTINCT value) = 3
Results:
| T1_ID | values |
|-------|-------------------|
| 1 | Apple,Kiwi,Orange |
Requête 2:
Vous pouvez aussi le faire en utilisant les collections:
CREATE TYPE STRINGLIST IS TABLE OF VARCHAR2(10);
/
SELECT *
FROM (
SELECT t1_id,
CAST(COLLECT(value ORDER BY value) AS STRINGLIST) AS "values"
FROM t2
GROUP BY t1_id
)
WHERE STRINGLIST('Apple', 'Kiwi', 'Orange') SUBMULTISET OF "values"
Results:
| T1_ID | values |
|-------|-------------------|
| 1 | Apple,Kiwi,Orange |
Comment saurions-nous si la requête est correcte? Vous avez posté des entrées (parfait!) Et du code qui apparemment ne fait pas ce que vous voulez (aussi utile). Vous n'avez pas indiqué l'exigence. Qu'est-ce que vous avez besoin de retourner? Toutes les lignes originales, uniquement pour les T1_ID qui apparaissent avec Apple, Orange et Kiwi au moins une fois? Exactement une fois? Exactement ces trois et aucun autre? TOUTES ces interprétations possibles sont cohérentes avec ce que vous avez posté. Alors: Quelle est l'exigence? – mathguy
@mathguy: tout Apple, Orange et Kiwi, 3 valeurs au moins une fois. Mon problème provient de ma requête actuelle, si je fais une valeur = 3, cela ne fonctionne pas car certains enregistrements peuvent avoir des doublons, par exemple: ID = 5. – Skn