recherche

Maison  >  Questions et réponses  >  le corps du texte

Comment afficher plusieurs tables à partir d'une colonne ID à l'aide d'une requête MySQL

J'essaie de trouver cette requête dans laquelle je veux montrer quels hôtes utilisent quel modèle dans ma table Zabbix. Le seul problème est que les hôtes et les modèles sont enregistrés dans la même table. Ils sont mélangés dans le tableau, par exemple l'ID 11813 est l'hôte et 11815 est le modèle. Maintenant, j'ai trouvé un tableau qui définit la relation entre ces deux : hosts_templates.

Le tableau comporte 3 colonnes : identifiant host_template, hostid, templateid

La table des hôtes comporte de nombreuses colonnes, mais contient également : hostid, name, où hostid contient l'hôte et le modèle. La table hôte possède une colonne templateid, mais elle n'est pas utilisée.

Dans le tableau hosts_templates, je peux voir quels hôtes utilisent quel modèle. Le seul problème est que je vois l'ID et que je souhaite voir les noms qui correspondent à cet ID. Ce que j'ai jusqu'à présent :

Sortie de la table hosts_templates

Sortie du nom, ID d'hôte des hôtes de la table

Ce que j'ai essayé jusqu'à présent :

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;

Le résultat de ces requêtes montre la moitié de ma solution, mais avec des duplications.

Le problème est que je ne peux pas sélectionner un nom différent pour la deuxième colonne, donc elle répète simplement la première colonne, ce qui n'est pas ce que je veux... et comme j'ai déjà rejoint l'ID d'hôte en interne, je peux' Je ne le ferai pas une deuxième fois. J'ai donc besoin d'une combinaison des 2 requêtes SQL ci-dessus. J'ai l'impression d'être proche, mais je n'y arrive tout simplement pas.

Toute aide serait grandement appréciée !

P粉207483087P粉207483087320 Il y a quelques jours426

répondre à tous(2)je répondrai

  • P粉670838735

    P粉6708387352024-03-27 09:23:21

    C'est une question fondamentale. Vous devez en savoir plus sur la syntaxe SQL telle que les jointures de chaîne, accédant au même nom de colonne à partir de différentes tables.

    Exemple de code :

    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;

    répondre
    0
  • P粉729436537

    P粉7294365372024-03-27 00:41:12

    Vous devez vous inscrire deux fois. Donnez aux tables différents alias afin de pouvoir les distinguer.

    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

    répondre
    0
  • Annulerrépondre