我有2个表:计算机和别名。计算机包含对Alias的FK引用。计算机可以有很多别名。
我正在尝试编写一个脚本,该脚本将删除计算机中名称字段的主机名(在第一个'。'之前的所有内容)部分,并验证别名表中是否存在别名条目。我最终试图生成一个包含computers.id和amp;的报告。 computers.name没有匹配的地方。
SELECT DISTINCT t1.id,
t1.name,
t2.alias
FROM computers t1
INNER JOIN alias t2
ON t1.id = t2.computer_id
WHERE alias.alias <> 'hostname'
OR alias.alias IS NULL;
我的perl脚本已经可以从'hostname.fqdn.com'解析'hostname'了,我可以将其作为参数传递,但我不确定如何创建这样的报告,或者即使我在正确的轨道。
欢迎任何建议
答案 0 :(得分:1)
您需要使用LEFT JOIN代替INNER JOIN
并提取名称,您可以使用字符串函数SUBSTRING_INDEX
:
SELECT DISTINCT t1.id,
SUBSTRING_INDEX(t1.name, '.', 1) AS name,
t2.alias
FROM computers t1
LEFT JOIN alias t2
ON t1.id = t2.computer_id
AND alias.alias = 'hostname'
WHERE alias.alias IS NULL;