Heim > Fragen und Antworten > Hauptteil
Ich versuche diese Abfrage zu finden, in der ich anzeigen möchte, welche Hosts welche Vorlage in meiner Zabbix-Tabelle verwenden. Das einzige Problem besteht darin, dass die Hosts und Vorlagen in derselben Tabelle registriert sind. Sie sind in der Tabelle gemischt, zum Beispiel ist ID 11813 der Host und 11815 die Vorlage. Jetzt habe ich eine Tabelle gefunden, die die Beziehung zwischen diesen beiden definiert: hosts_templates.
Die Tabelle hat 3 Spalten: host_template id, hostid, templateid
Die Hosts-Tabelle hat viele Spalten, enthält aber auch: Host-ID, Name, wobei Host-ID Host und Vorlage enthält. Der Tabellenhost verfügt zwar über eine templateid-Spalte, diese wird jedoch nicht verwendet.
In der Tabelle hosts_templates kann ich sehen, welche Hosts welche Vorlage verwenden. Das einzige Problem besteht darin, dass ich die ID sehe und die Namen sehen möchte, die dieser ID entsprechen. Was ich bisher habe:
Ausgabe der Tabelle hosts_templates
Ausgabe aus Name, Host-ID aus Tabelle Hosts
Was ich bisher versucht habe:
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;
Die Ausgabe dieser Abfragen zeigt die Hälfte meiner Lösung, jedoch mit Duplikaten.
Das Problem ist, dass ich für die zweite Spalte keinen anderen Namen auswählen kann, sodass nur die erste Spalte wiederholt wird, was nicht das ist, was ich möchte ... und da ich der Host-ID bereits intern beigetreten bin, kann ich Ich mache es nicht ein zweites Mal. Ich benötige also eine Kombination der oben genannten 2 SQL-Abfragen. Ich habe das Gefühl, nah dran zu sein, aber ich schaffe es einfach nicht.
Jede Hilfe wäre sehr dankbar!
P粉6708387352024-03-27 09:23:21
这是一个基本问题。您应该了解有关 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;
P粉7294365372024-03-27 00:41:12
您必须加入两次。为表指定不同的别名,以便您可以区分它们。
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