mysql查询显示一个ID列中的多个表

Posted

技术标签:

【中文标题】mysql查询显示一个ID列中的多个表【英文标题】:mysql query show multiple tables from one ID column 【发布时间】:2022-01-13 18:02:37 【问题描述】:

我试图在我想显示哪些主机使用我的 Zabbix 表中的哪个模板的地方找到这个查询。唯一的问题是主机和模板注册在同一个表中。它们在表中混合在一起,例如 ID 11813 是主机,11815 是模板。 现在我找到了一个表,其中定义了这两者之间的关系:hosts_templates。

此表有 3 列: host_template id、hostid、templateid

hosts 表有很多列,但还包含:hostid、name 其中 hostid 包含主机以及模板。表 hosts 确实有一个 templateid 列,但它没有被使用。

在 hosts_templates 表中,我可以看到哪些主机使用了哪个模板。唯一的问题是我看到了 ID,并且我想看到与该 ID 匹配的名称。 到目前为止我所拥有的:

hosts_templates 表的输出

名称的输出,主机表的主机ID

到目前为止我所尝试的:

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,所以我不能这样做第二次。所以我需要上面2个sql查询的组合。我有一种感觉,我是如此接近,但我无法得到它。

任何帮助将不胜感激!

【问题讨论】:

问题中请输入纯文本,而不是图片,以便我们在测试时复制粘贴。 在此处包含示例数据和预期结果。 我没有否决您的问题。但是你应该尽量写得更简洁,删掉不必要的单词,并给出想要的输出。这将帮助读者,让你有更多的机会得到答案。 你需要什么结果? 【参考方案1】:

您必须加入两次。为表格指定不同的别名,以便您区分它们。

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

【讨论】:

加入条件中主机的别名有错字,应该是h1, h2【参考方案2】:

当您从一个表中选择数据时,即仅 host_templates

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

使用它,它有效

【讨论】:

【参考方案3】:

这是一个基本问题。您应该了解更多关于 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;

【讨论】:

以上是关于mysql查询显示一个ID列中的多个表的主要内容,如果未能解决你的问题,请参考以下文章

关于列中的选择查询 - mysql

如何列出各个列,其中每个列包含一个 id 计数,其中每列中的 id 不在 MySQL 中每列的不同表中

Mysql连接多个表和列重复[关闭]

在 MySQL 中的表的多个列中查找连接的字符串

mysql查询以获取列中每个元素的计数

获取 MySQL 列中的最小未使用值