2016-08-11 92 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完整的工具,將幫助您格式化查詢,這些工具有這麼多的附加功能,可以節省大量的你的時間