Rumah > Soal Jawab > teks badan
Saya cuba mencari pertanyaan ini di mana saya ingin menunjukkan hos yang menggunakan templat dalam jadual Zabbix saya. Satu-satunya masalah ialah hos dan templat didaftarkan dalam jadual yang sama. Mereka bercampur dalam jadual, contohnya ID 11813 ialah hos dan 11815 ialah templat. Sekarang saya menjumpai jadual yang mentakrifkan hubungan antara kedua-dua ini: hosts_templates.
Jadual mempunyai 3 lajur: id templat_hos, hos, id templat
Jadual hos mempunyai banyak lajur, tetapi juga mengandungi: hos, nama, tempat hos mengandungi hos dan templat. Hos jadual memang mempunyai lajur templateid, tetapi ia tidak digunakan.
Dalam jadual hosts_templates saya dapat melihat hos yang menggunakan templat mana. Satu-satunya masalah ialah saya melihat ID dan ingin melihat nama yang sepadan dengan ID tersebut. Apa yang saya ada setakat ini:
Output hos meja_templat
Output daripada nama, ID hos daripada hos jadual
Apa yang saya telah cuba setakat ini:
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;
Keluaran pertanyaan ini menunjukkan separuh daripada penyelesaian saya, tetapi dengan pendua.
Masalahnya ialah saya tidak boleh memilih nama lain untuk lajur kedua, jadi ia hanya mengulangi lajur pertama, yang bukan yang saya mahu... dan memandangkan saya sudah menyertai ID hos secara dalaman, saya boleh' t buat kali kedua. Jadi saya memerlukan gabungan 2 pertanyaan sql di atas. Saya rasa seperti saya dekat, tetapi saya tidak boleh mendapatkannya.
Sebarang bantuan akan sangat dihargai!
P粉6708387352024-03-27 09:23:21
Ini soalan asas. Anda harus mengetahui lebih lanjut tentang sintaks SQL seperti gabungan rantai, mengakses nama lajur yang sama daripada jadual yang berbeza.
Kod contoh:
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
Anda mesti menyertai dua kali. Berikan jadual alias yang berbeza supaya anda boleh membezakannya.
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