MySQL搜索使用连接区别

时间:2012-08-30 05:51:08

标签: mysql inner-join

我有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'了,我可以将其作为参数传递,但我不确定如何创建这样的报告,或者即使我在正确的轨道。

欢迎任何建议

1 个答案:

答案 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;