0
votes

Comment utiliser là où la requête a la même colonne dans la même table?

J'ai ces données.

SELECT id FROM tbl_data WHERE value = 'A' AND value = 'B'


5 commentaires

Y a-t-il une une ligne simple qui contient à la fois A et B dans la même colonne?


@Nicohaase non, la valeur toujours un caractère A ou B ou C.


Quel est le problème avec l'utilisation de ou alors?


@Samchats, il retournera ID 1 et 2.


@Yusufmm, je l'ai eu, mon mauvais.


3 Réponses :


4
votes
select id from table 
where
value  in ('A', 'B')
group by id 
having count( distinct value ) = 2

3 commentaires

Pouvez-vous expliquer cette partie? comptez (valeur distincte) = 2 signifie-t-il que si je veux sélectionner A, B et C, et que cela deviendra = 3 ?


signifie-t-il que si je veux sélectionner A, B et C, il deviendra = 3 , oui, c'est correct


@YUSUFMM - Vous avez juste besoin de C dans clause aussi, où la valeur dans ('a', 'b', 'c')



1
votes

Une alternative à la solution de @otar consiste à utiliser un CTE code>

CREATE TEMPORARY TABLE t ( ID INT, value TEXT);
INSERT INTO t VALUES 
(1,'A'),(1,'B'),(1,'C'),(2,'A'),(2,'C'),(2,'F');


WITH j AS (
  SELECT id,array_agg(value) AS arr
FROM t GROUP BY id)
SELECT * FROM j
WHERE arr @> ARRAY['A','B'];

 id |   arr   
----+---------
  1 | {A,B,C}
(1 Zeile)


0 commentaires

0
votes

Vous pouvez simplement exécuter ce qui suit:

SELECT min(id) FROM table WHERE value in ('A','B');


1 commentaires

Vous pouvez utiliser min (id).