mysql查询从一个id列显示多个表

igetnqfo  于 2021-07-26  发布在  Java
关注(0)|答案(3)|浏览(364)

我试图找到这个查询,在这里我想显示哪些主机使用我的zabbix表中的哪个模板。唯一的问题是主机和模板注册在同一个表中。它们在表中混合,例如id 11813是主机,11815是模板。现在我找到了一个表,其中定义了这两个模板之间的关系:hosts\u templates。
此表有3列:主机模板id、主机id、模板id
hosts表有许多列,但也包含:hostid、name,其中hostid包含主机和模板。表hosts确实有templateid列,但没有使用它。
在hosts\u templates表中,我可以看到哪些主机使用哪个模板。唯一的问题是我看到的id和我想看到的名称匹配的id。我到目前为止:
来自表主机的输出\u模板

name的输出,hostid的表hosts

到目前为止,我尝试了:

select name, name
  from hosts_templates
 inner join hosts on hosts_templates.hostid = hosts.hostid;

select name, name
  from hosts_templates
 inner join hosts on hosts_templates.templateid = hosts.hostid;

这些查询的输出显示了我的解决方案的一半,但是重复了。
问题是我不能为第二列选择不同的名称,所以它只是复制了第一列,这不是我想要的。。。因为我已经加入了hostid,我不能再做第二次了。所以我需要上面两个sql查询的组合。我有一种感觉,我是如此接近,但我就是不能得到它。
任何帮助都将不胜感激!

uplii1fm

uplii1fm1#

你必须参加两次。为表指定不同的别名,以便可以区分它们。

SELECT h1.name as host_name, h2.name AS template_name
FROM hosts_template AS t
JOIN hosts AS h1 ON t.hostid = h1.hostid
JOIN hosts AS h2 ON t.hosttemplateid = h2.hostid
57hvy0tb

57hvy0tb2#

这是一个基本问题。您应该进一步了解sql语法,例如链式联接,从不同的表访问相同的列名。
示例代码:

select h1.name, h2.name
from hosts_templates ht
    inner join hosts h1 on ht.hostid = h1.hostid
    inner join hosts h2 on ht.templateid = h2.hostid;
py49o6xq

py49o6xq3#

当您从一个表中选择数据时

SELECT id,hosts_templates.hostid,hosts_templates.templateid FROM hosts,host_templates WHERE hosts.id = hosts_templates.hostsid OR hosts.id=hosts_templates.templateid

使用它,它工作

相关问题