2013-06-18 2 views
4

J'ai une table comme ça ...récupérons les enregistrements d'identité unique que d'aucun autre

oid  id 
35  1 
43  1 
46  1 
43  2 
49  2 

Je id = 1 maintenant je veux pnly ces documents qui appartiennent à seulement 1 aucun autre ids.

i.e. o/p - 35,46

Je ne besoin oid = 43 BCZ à laquelle elle appartient 2 aussi.

Je ne sais pas comment écrire ma question dans la table sur stackoverflow alors s'il vous plaît ignorer ma mauvaise façon de demander.

grâce

+0

pourquoi vous ne voulez pas id = 43 ?? –

+0

Donc, fondamentalement, vous voulez sélectionner les lignes qui ne sont pas des doublons (en ce qui concerne oid) dans la table? –

+0

@sharif parce que 43 est un double oid dans le tableau –

Répondre

5

Essayez ci-dessous:

SELECT * FROM `table` 
WHERE id = 1 AND oid NOT IN (SELECT oid FROM `table` where id != 1) 
+1

+1 c'est ce qu'il cherche réellement :) – swapnesh

+0

'NOT EXISTS' peut-être mieux – Kermit

2
select count(oid), oid from table 
where id = 1 
group by oid 
having count(oid) = 1 
+0

aussi je besoin de ces enregistrements où id = 1. SO doit-il être ... select count (id), oid, id de la table où id = 1 group by id ayant le nombre (id) = 1 –

+0

'WHERE id = 1'? – Aquillo

+0

@Aquillo Merci j'ai raté cette partie –

3

est ici une autre façon,

SELECT oid 
FROM tableName 
GROUP BY oid 
HAVING COUNT(DISTINCT id) = 1 AND -- counts the number of ID for OID 
     MAX(ID) = 1     -- checks if the value of ID is equal to 1 

SORTIE

╔═════╗ 
║ OID ║ 
╠═════╣ 
║ 35 ║ 
║ 46 ║ 
╚═════╝ 
1
SELECT * 
FROM TABLE_NAME 
WHERE id = 1 
AND oid NOT IN (SELECT DISTINCT oid FROM TABLE_NAME where id != 1) 
Questions connexes