0

我有 2 个表:计算机和别名。Computers 包含对 Alias 的 FK 引用。一台计算机可以有许多别名。

我正在尝试编写一个脚本,该脚本将删除计算机中名称字段的主机名(第一个“。”之前的所有内容)部分,并验证别名表中是否存在别名条目。我最终试图生成一份报告,其中包含不匹配的computers.id 和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”解析“主机名”,我可以将其作为参数传递,但我不确定如何创建这样的报告,或者即使我走在正确的轨道上。

欢迎任何建议

4

1 回答 1

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;
于 2012-08-30T05:55:22.827 回答