Colonne SQL de comparer dans le même tableau (auto-jointure)
J'ai besoin d'un conseil pour résoudre ce SQL (auto-jointure) problème:
une table, avec des colonnes de value
et category
id || value || category || foo
------------------------------------
1 || 1 || a || 1
2 || 2 || a || 4
3 || 3 || a || 2
4 || 0 || b || 2
5 || 1 || b || 1
6 || 2 || b || 4
7 || 3 || b || 2
8 || 4 || b || 2
9 || 5 || b || 1
10 || 5 || b || 4
11 || 6 || b || 2
12 || 99 || z || 2
Je voudrais comparer toutes les valeurs de la catégorie b
et toutes les valeurs de la catégorie a
et obtenir toutes les valeurs qui sont dans b
et pas dans a
ou leur id
, donc:
(0,1,2,3,4,5,5,6) "comparer" (1,2,3) => (0,4,5,5,6)
- Qui SGBD que vous utilisez? Postgres? Oracle?
- je suis à la recherche d'un "ansi sql" la solution, c'est de travailler avec mysql, sqlite et postgresql.
- Un "ANSI" solution généralement ne fonctionne pas sur MySQL en raison de il est périmé SQL de mise en œuvre (
EXCEPT
vient immédiatement à mon esprit à la lecture de votre description du problème).
Vous devez vous connecter pour publier un commentaire.
ANSI SQL:
Voir en direct ici.
Commencer à analyser votre tâche: "obtenir toutes les valeurs qui sont dans b et pas dans l'une ou de leur carte d'identité"
SELECT value FROM mytable
WHERE category = 'b'
AND value NOT IN (SELECT value FROM mytable WHERE category = 'a')