2012-11-04 3 views
3

Je tables avec la structure suivante:MySQL: Afficher des enregistrements spécifiques de table?

table1

| ID1 | NAME | GROUP_ID | 
------------------------- 
| 1 | AAA |  101 | 
| 2 | A_A |  101 | 
| 3 | BBB |  0 | 
| 4 | CCC |  103 | 
| 5 | C_C |  103 | 
| 6 | DDD |  0 | 
| 7 | EEE |  0 | 
| 8 | FFF |  0 | 
| 9 | GGG |  0 | 
| 10| HHH |  104 | 
| 11| H_H |  104 | 

table2

| ID2 | NAME | 
-------------- 
| 1 | AAA | 
| 2 | BBB | 
| 3 | C_C | 

groupes

| GROUP_ID | NAME | 
------------------- 
|  101 | AAA | 
|  101 | A_A | 
|  103 | CCC | 
|  103 | C_C | 
|  104 | HHH | 
|  104 | H_H | 

'table1' est une table avec tous les éléments. A cette table ont des enregistrements en double fondés par des critères et ces éléments insérés dans la table 'groupes'. À table2 ont des éléments qui correspondent aux éléments de table1.

Je souhaite afficher tous les enregistrements de table1 qui ne figurent pas dans la table2. Si l'élément de table2 est dans les groupes de tables, n'affiche pas tous les éléments de ce groupe dans la table de résultats. En ce cas, les éléments sont AAA/A_A (group_id 101) et CCC/C_C (group_id 103)

RÉSULTAT TABLEAU

| ID1 | NAME | GROUP_ID | 
------------------------- 
| 6 | DDD |  0 | 
| 7 | EEE |  0 | 
| 8 | FFF |  0 | 
| 9 | GGG |  0 | 
| 10| HHH |  104 | 
| 11| H_H |  104 | 

Les éléments avec des noms A_A et C_C pas dans le tableau de résultat parce que ce articles sont des doublons.

J'ai essayé ceci: http://sqlfiddle.com/#!2/70253/3

Répondre

2

Cette requête affiche tous les éléments de table1 qui ne sont pas table2 par son nom, et également filtrer toutes les entrées qui ont le même identifiant comme une entrée group qui sont présents dans table2 (doublons dans votre cas) .

select t1.* from table1 t1 left join groups g on t1.name=g.name 
left join table2 t2 on t2.name=t1.name 
where (g.group_id is null or g.group_id not in (SELECT gg.group_id FROM TABLE2 t2 inner join groups gg on gg.name=t2.name)) 
and t2.id2 is null; 

Consultez votre sqlFiddle mis à jour.

+0

Les enregistrements SQL ne comprennent pas les groupes de tables désolé. C'est correctement http://sqlfiddle.com/#!2/70253/3 – dido

+0

@dido Voir ma mise à jour – dan

2

Que diriez-vous:

Pour les groupes utilisés:

select * from table1 
where NAME not in (SELECT distinct(name) FROM TABLE2) 

Pour tous les groupes, quelle que soit l'utilisation:

select * from table1 
where NAME not in (SELECT distinct(name) FROM groups) 

http://sqlfiddle.com/#!2/83b7c/45

Questions connexes