0

Computers と Alias の 2 つのテーブルがあります。Computers には Alias への FK 参照が含まれています。コンピュータは多くのエイリアスを持つことができます。

コンピュータの名前フィールドのホスト名 (最初の「.」より前のすべて) 部分を削除し、エイリアス テーブルにエイリアス エントリがあることを確認するスクリプトを作成しようとしています。最終的に、一致しない computer.id & computer.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」を解析でき、それを引数として渡すことができますが、そのようなレポートを作成する方法がよくわかりません。

どんな提案も歓迎

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 に答える