SQL-在3个表之间进行选择

SQL-在3个表之间进行选择,sql,database,Sql,Database,我有三张桌子: hosts (host_id, name, address, template_id); hostgroup (hostgroup_id, name); hosts_hostgroup (a, b); 第一个表保存所有主机,第二个表保存所有组,最后一个表显示每个主机属于哪个组 请注意,hosts\u hostgroup有两个不同的列名a和b 哪一个查询可以为我提供属于某个组的主机?为什么不在“主机”表中设置“主机组id”列?为什么需要额外的“hosts\u hostgroup”

我有三张桌子:

hosts (host_id, name, address, template_id);
hostgroup (hostgroup_id, name);
hosts_hostgroup (a, b);
第一个表保存所有主机,第二个表保存所有组,最后一个表显示每个主机属于哪个组

请注意,
hosts\u hostgroup
有两个不同的列名
a
b


哪一个查询可以为我提供属于某个组的主机?

为什么不在“主机”表中设置“主机组id”列?为什么需要额外的“hosts\u hostgroup”表?@Bernard,hosts可以在>1中group@AJ:可能,但未指定。为什么不在“hosts”表中设置“hostgroup\u id”列?为什么需要额外的“hosts\u hostgroup”表?@Bernard,hosts可以在>1中group@AJ:可能吧,但没有具体说明。谢谢您的回复。如果表hosts\u hostgroup中的hostgroup\u id和host\u id列像a和b一样在哪里?主机组(a、b);什么是“a”和“b”?“a”是否包含主机id值或主机组id值?同样,哪些值存储在“b”中?另外,当您的所有其他标识符都具有有意义的命名约定时,为什么要使用名称“a”和“b”?是的,a和b的值与host_id和hostgroup_id的值相同。。。只是名字不同而已!根据您指定的正确列名更新了我的答案。感谢您的回复。如果表hosts\u hostgroup中的hostgroup\u id和host\u id列像a和b一样在哪里?主机组(a、b);什么是“a”和“b”?“a”是否包含主机id值或主机组id值?同样,哪些值存储在“b”中?另外,当您的所有其他标识符都具有有意义的命名约定时,为什么要使用名称“a”和“b”?是的,a和b的值与host_id和hostgroup_id的值相同。。。只是名字不同而已!根据您指定的正确列名更新了我的答案。
SELECT hosts.* FROM hosts
INNER JOIN hosts_hostgroup ON hosts.host_id=hosts_hostgroup.a
WHERE hosts_hostgroup.b=(some id);
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'