2016-08-11 8 views
-1

過去1年ほど、私はnoSQLデータベースの作業に多くの時間を費やしてきました。つまり、私はSQLデータベースとSQL Server Management Studio(SSMS)で動作する新しい仕事を始めました。読みやすさを向上させ、クエリをより簡潔にするための提案は、非常に高く評価されます。SSMSを使用してSQLクエリを改善する

SELECT DISTINCT 
    [db1].[id] as "Node ID", 
    [db2].[name] as "Node Name", 
    [db3].[name] as "ISP", 
    [db4].[name] as "City", 
    CASE 
     WHEN [db1].[object_type_id] = 17 
      THEN 'Client' 
     WHEN [db1].[synthetic_location].[object_type_id] = 5 
      THEN 'System' 
     WHEN [db1].[object_type_id] IS NULL 
      THEN 'System' 
    END AS Type 
FROM 
    [db1].[synthetic_location] 
JOIN 
    [db2].[machine] ON [db2].[synthetic_location_id] IS NULL 
JOIN 
    [db3].[internet_service_provider] ON [db3].[id] = [db1].[internet_service_provider_id] 
JOIN 
    [db4].[geography_city] ON [db4].[geography_city].[id] = [db1].[synthetic_location].[geography_city_id] 
WHERE 
    [db2].[status_type_id] < 1 
    AND [db1].[flags] = 6 
+1

読めないと簡潔にはどうでしょう? – dfundako

+1

標準とは思われません。あなたは本当に悪いものを見ます。これは私にとっては大丈夫です。この質問は、あなたがスタイルについて尋ねるときに閉じられるかもしれません。 – Paparazzi

+1

最初の結合では、 'db1.synthetic_location.column_name 'のようにどの列を結合するのかは明記されていません.db1.synthetic_location.column_name = db2.machine.coumn_nameとdb2.machine.column_nameはnullになります。 –

答えて

1

あなたのクエリはうまく見えますが、1つの例外を除いて完全に読み取り可能です。

JOINの代わりに明示的にINNER JOINを指定して、意図を明確にする必要があります。

0

もっと簡潔にするために、エイリアスを使用してください。

名前に英字、数字、またはアンダースコアしかない場合や、名前がsqlキーワードでない場合は、大括弧は必要ありません。 (私見これらのブラケットは、多くの場合、より読みSQLを作成しますが)

SELECT DISTINCT 
    loc.id as [Node ID] 
, m.name as [Node Name] 
, isp.name as [ISP] 
, geo.name as [City] 
, CASE 
    WHEN loc.object_type_id = 17 THEN 'Client' 
    WHEN loc.synthetic_location.object_type_id = 5 THEN 'System' 
    WHEN loc.object_type_id IS NULL THEN 'System' 
    END AS Type 

FROM [db1].[synthetic_location] loc 

JOIN [db2].[machine] m 
    ON (m.synthetic_location_id IS NULL and m.status_type_id < 1) 

JOIN [db3].[internet_service_provider] isp 
    ON (isp.id = loc.internet_service_provider_id) 

JOIN [db4].[geography_city] geo 
    ON (geo.id = loc.geography_city_id) 

WHERE loc.flags = 6 
0

あなたは、クエリをフォーマットするのに役立ちますSSMSブーストまたはSQLの完全なようなツールを使用することができ、これらのツールは、多くのを保存することができますので、多くの追加機能を持っていますあなたの時間

関連する問題