J'essaie d'écrire une seule requête pour sélectionner toutes les lignes qui ont une relation unique entre deux colonnes.
par exemple:
1 2 3 4 ------------- a t g 1 a f d 1 b h l 2 b r g 2 b q m 3
Ici, je ' Je ne regarde que les colonnes 1 et 4.
Dans ce tableau, je voudrais sélectionner les lignes 1 et 2 car dans les deux, colonne 1 = a et colonne 4 = 1. en d'autres termes, chaque le moment où a apparaît dans la colonne un, 1 apparaît dans la colonne quatre. Je ne voudrais pas sélectionner de lignes contenant b pour la colonne 1 car les valeurs correspondantes pour la colonne 4 pourraient être 2 ou 3.
3 Réponses :
Je suppose que c'est ce que vous voulez:
select *
from my_table
where "1" in (
select c1
from (
select "1" as c1, count("4") as cnt
from my_table
group by "1" -- fixed here.
having count("4") > 1
) x
group by c1
having count(cnt) = 1 -- this is the key condition.
)
Étant donné que les noms de vos colonnes ne commencent pas par une lettre, la plupart des bases de données les accepteront si vous les mettez entre guillemets ( " ), comme je l'ai fait.
im obtenant une erreur qui dit "1" doit apparaître dans la clause group by. Mes colonnes dans la base de données sont basées sur des lettres. Je viens d'utiliser des chiffres à des fins de publication
Oui, corrigé maintenant.
Vous pouvez facilement obtenir les valeurs de la colonne 1 qui répondent à vos besoins avec cette requête:
SELECT *
FROM mytable
WHERE col1 IN
(
SELECT col1
FROM mytable
GROUP BY col1
HAVING COUNT(DISTINCT col4) = 1
)
Votre requête finale serait donc:
SELECT col1 FROM mytable GROUP BY col1 HAVING COUNT(DISTINCT col4) = 1
Si vous voulez sélectionner les lignes réelles, puis utilisez n'existe pas :
select t.* from t where not exists (select 1 from t t2 where t2.c1 = t.c1 and t2.c4 <> t.c4);
Si vous voulez juste les valeurs de c1 alors utilisez group by comme suggéré par d'autres réponses.
La table est si grande que je ne peux pas rechercher des occurrences spécifiques. J'ai besoin d'écrire une requête pour sélectionner le moment où la condition décrite ci-dessus se produit. De plus, avec cette logique, "where col1 = 'b' and col4 = '2'" renverrait des lignes que je ne veux pas car il y a une ligne où col1 = b et col4 = 3.
Je pense que ce que vous voulez, c'est une liste de ces lignes, où la valeur de la colonne
4ne dépend que de la valeur de la colonne1.