J'ai une table
create table a (page int, pro int) go insert into a select 1, 2 insert into a select 4, 2 insert into a select 5, 2 insert into a select 9, 2 insert into a select 1, 3 insert into a select 2, 3 insert into a select 3, 3 insert into a select 4, 3 insert into a select 9, 3 insert into a select 1, 4 insert into a select 9, 4 insert into a select 12, 4 insert into a select 1, 5 insert into a select 9, 5 insert into a select 12, 5 insert into a select 13, 5 insert into a select 14, 5 insert into a select 15, 5 go
(voici le SQLfiddle de cette table et les requêtes j'ai commencé à écrire)
Je cherche à extraire la colonne commune "page" pour chaque colonne "pro" de cette table. Voici ce que nous attendons:
1 9
J'ai essayé d'utiliser:
SELECT DISTINCT a.page FROM a WHERE a.page IN ( SELECT b.page FROM a as b WHERE b.pro <> a.pro )
mais cette requête renvoie toutes les "pages" qui ont au less une valeur commune, ce qui n'est pas ce dont nous avons besoin. voir ci-dessous :
1 4 9 12
La requête opposée alias valeur différente au less un mais pas tout le time
Je cherche à extraire la "page" liée à un ou plusieurs "pro" mais sans être commune à tous (c'est l'exact opposé de la requête précédente)
Voici ce que nous attendons:
2 3 4 5 12 13 14 15
Je n'arrive pas à find une solution à ces 2 questions: '(Quelqu'un pourrait-il m'aider sur ces questions?
Meilleures salutations
edit: l'URL SQLfiddle
Juste un peu de reflection inversée – groupe par page
et count des valeurs pro
distinctes pour chacun. Renvoie des lignes qui correspondent au total des valeurs pro
distinctes
SELECT [page] FROM a GROUP BY [page] HAVING COUNT(DISTINCT pro) = (SELECT COUNT(DISTINCT pro) FROM a)
SQLFiddle
EDIT: pour le second problème, il suffit de replace =
avec '<' dans la dernière ligne -> SQLFiddle
Fot la première partie de la question, essayez cette requête:
SELECT DISTINCT t1.page FROM a t1 WHERE (SELECT COUNT(DISTINCT t2.pro) FROM a t2 WHERE t2.page = t1.page) = (SELECT COUNT(DISTINCT t3.pro) FROM a t3)
Et la deuxième requête est la soustraction simple de toutes les valeurs de page:
SELECT DISTINCT t4.page FROM a t4 EXCEPT SELECT DISTINCT t1.page FROM a t1 WHERE (SELECT COUNT(DISTINCT t2.pro) FROM a t2 WHERE t2.page = t1.page) = (SELECT COUNT(DISTINCT t3.pro) FROM a t3)