Mysql 检查where子句中是否存在列

Mysql 检查where子句中是否存在列,mysql,Mysql,我会尽力用最好的方式解释我的问题 首先,我向您展示我的sql表: 主机:此表包含所有主机,其中一些可以是模板,具体取决于寄存器的值 --ID——主机名称寄存器-- 1 host1 1 2 host2 1 3 template1 0 4 template2 0 主机模板:这是将主机与模板链接的关联表,多个模板可以链接到一个主机,而一个主机可能没有模板 -

我会尽力用最好的方式解释我的问题

首先,我向您展示我的sql表:

主机:此表包含所有主机,其中一些可以是模板,具体取决于寄存器的值

--ID——主机名称寄存器--

 1         host1            1
 2         host2            1
 3         template1        0
 4         template2        0
主机模板:这是将主机与模板链接的关联表,多个模板可以链接到一个主机,而一个主机可能没有模板

--ID--ID\U主机--ID\U模板--

1             1              3
2             1              4
    host1       template1, template2
    host2            NULL
我希望检索所有主机及其关联模板,即使它们没有:

--主机名---模板--

1             1              3
2             1              4
    host1       template1, template2
    host2            NULL
我尝试使用left join执行此操作,结果只得到host1:

SELECT h.host_name, GROUP_CONCAT( ht.host_name ) 
FROM host_template sht
LEFT JOIN host h ON h.id = sht.id_host
LEFT JOIN host ht ON ht.id = sht.id_template
WHERE ht.register =0
GROUP BY host_name
另一种方法是在左连接中添加OR子句。在结果中,我有host2,但所有的模板

SELECT h.host_name, GROUP_CONCAT( ht.host_name ) 
FROM host_template sht
LEFT JOIN host h ON h.id = sht.id_host OR sht.id_host IS NULL 
LEFT JOIN host ht ON ht.id = sht.id_template OR sht.id_template IS NULL 
WHERE ht.register =0
GROUP BY host_name

我想我很快就能找到解决办法了,但我需要你们的帮助。谢谢:

我认为这条线路有问题:

LEFT JOIN host h ON h.id = sht.id_host OR sht.id_host IS NULL 
您可以尝试不使用或的内部联接:

INNER JOIN host h ON h.id = sht.id_host 
尝试此操作,并为其中添加了第二个参数:

SELECT h1.host_name, GROUP_CONCAT( h2.host_name ) FROM host_template ht
LEFT JOIN host h1 ON h1.id = ht.id_host
LEFT JOIN host h2 ON h2.id = ht.id_template 
WHERE h1.register =0 and h2.register = 0
GROUP BY h1.host_name

重新排序联接可能会执行以下操作:

SELECT h.host_name, GROUP_CONCAT( ht.host_name ) 
FROM host h
LEFT JOIN host_template sht ON h.id = sht.id_host
LEFT JOIN host ht ON ht.id = sht.id_template
WHERE h.register <>0
GROUP BY h.host_name

我对回复进行了编辑,以提高可视性。检查where子句。尝试为您的两个联接添加.register=0。我以前已经尝试过,但它似乎无论如何都不起作用。我找到了解决办法,但感谢你为我花费的时间;或者,将第一个连接更改为右连接可能会起作用—只要将where子句更改为h.0