2009-05-05 7 views
3

Avec des tables essentiellement comme suit:SQL pour trouver des doublons de clés étrangères dans un groupe

Elements 
    id INT PRIMARY KEY 
    ... 

Observations 
    id INT PRIMARY KEY 
    ... 

Data 
    id INT PRIMARY KEY 
    observation_id FOREIGN KEY 
    element_id FOREIGN KEY 
    value FLOAT 
    ... 

Je veux trouver tous les observation_id s où il y a des doublons element_id s dans un seul observation_id. Par exemple, si je Data des documents comme:

1|50|23|4.5 
2|50|24|9.9 
3|66|23|4.4 
4|66|23|4.1 

Ensuite, la requête ferait rapport observation_id66 parce qu'il a deux lignes associées à element_id23.

(J'utilise PostgreSQL, mais cela est probablement une question de SQL de base.)

Répondre

10

Utilisez le count() agrégat combiné avec une clause 'ayant':

 
select observation_id, element_id, count(*) 
from Data 
group by observation_id, element_id 
having count(*) > 1 
+0

Eh oui, voilà. Merci. J'étais si près. – Grant

Questions connexes