2011-06-01 70 views
0

之间选择我有3个表:SQL - 3个表

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

第一个表保留所有主机,第二个所有的组,最后一个说哪个组属于每个主机。

请注意hosts_hostgroup有两个不同的列名ab

哪个查询给我属于某个组的主机?

+2

为什么没有在你的 '主人' 表 'hostgroup_id' 列?为什么需要额外的'hosts_hostgroup'表? – Bernard 2011-06-01 16:42:31

+0

@Bernard,主持人可以在> 1组 – 2011-06-01 16:43:28

+0

@AJ:也许,但没有指定。 – Bernard 2011-06-01 16:46:54

回答

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

感谢您的回复。如果在表hosts_hostgroup中的列hostgroup_id和host_id在哪里像a和b? hosts_hostgroup(a,b); – aocferreira 2011-06-01 16:50:01

+0

什么是“a”和什么是“b”? “a”是否保留host_id值或hostgroup_id值?同样,哪些值存储在“b”中?另外,为什么在所有其他标识符都有一个有意义的命名约定时使用名称“a”和“b”**? – 2011-06-01 16:55:35

+0

是的,a和b具有相同的值host_id和hostgroup_id ......只是名称不同! – aocferreira 2011-06-01 16:57:26