2016-08-11 84 views
-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 = db2.machine.coumn_name和db2.machine.column_name为'db1.synthetic_location.column_name join db2.machine.column_name'为空' –

回答

1

您的查询看起来很好,并且完全可读,但有一个例外;

您应明确声明INNER JOIN而不仅仅是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完整的工具,将帮助您格式化查询,这些工具有这么多的附加功能,可以节省大量的你的时间