2011-06-01 3 views
0

J'ai 3 tables:SQL - choix entre 3 tables

hosts (host_id, name, address, template_id); 
hostgroup (hostgroup_id, name); 
hosts_hostgroup (a, b); 

La première table conserve tous les hôtes, le second tous les groupes et le dernier dit à quel groupe appartiennent chaque hôte. Notez que hosts_hostgroup a deux noms de colonne différents a et b.

Quelle est la requête pour me donner les hôtes qui appartiennent à un groupe?

+2

Pourquoi ne pas avoir une colonne 'hostgroup_id' dans votre table 'hôtes'? Pourquoi le besoin de la table supplémentaire 'hosts_hostgroup'? – Bernard

+0

@Bernard, les hôtes peuvent être dans> 1 groupe –

+0

@AJ: Peut-être, mais cela n'a pas été spécifié. – Bernard

Répondre

2
SELECT h.* 
FROM hosts h 
INNER JOIN hosts_hostgroup hg ON hg.host_id = h.host_id 
INNER JOIN hostgroup g ON g.hostgroup_id = hg.hostgroup_id 
WHERE g.name = 'mygroupname' 
2
SELECT hosts.* FROM hosts 
INNER JOIN hosts_hostgroup ON hosts.host_id=hosts_hostgroup.a 
WHERE hosts_hostgroup.b=(some id); 
+0

Merci pour votre réponse. Et si dans la table hosts_hostgroup les colonnes hostgroup_id et host_id étaient comme a et b? hosts_hostgroup (a, b); – aocferreira

+0

qu'est-ce que "a" et qu'est-ce que "b"? est-ce que "a" contient des valeurs host_id ou des valeurs hostgroup_id? De même, quelles valeurs sont stockées dans "b"? En outre, ** pourquoi utiliser les noms "a" et "b" ** lorsque tous vos autres identifiants ont une convention de nommage significative? –

+0

oui, a et b contiennent les mêmes valeurs que host_id et hostgroup_id ... avec des noms différents! – aocferreira