2012-12-13 136 views
0

我試圖提取使用此查詢數據庫中的某些信息,Multi-Table Selfjoins - 有沒有一個很好的方法來做到這一點?

SELECT dbo.AfterHoursParameterSetup.Customer_id 
, dbo.tblCustomer.Company 
, dbo.tblDevices.device_id 
, dbo.AfterHoursParameterSetup.DeviceMasterID 
, dbo.tblDriverType.DriverType 
, dbo.tblGroups.GroupName 
, dbo.AfterHoursParameterSetup.ReportBy 
, dbo.AfterHoursParameterSetup.TripTimeFilter 
, dbo.AfterHoursParameterSetup.chkWeekEndTravel 
, dbo.AfterHoursParameterSetup.WeekdayStart 
, dbo.AfterHoursParameterSetup.WeekDayEnd 
, dbo.AfterHoursParameterSetup.WeekEndFrom 
, dbo.AfterHoursParameterSetup.WeekEndTo 
, dbo.AfterHoursParameterSetup.ReportType 
FROM dbo.AfterHoursParameterSetup 
FULL JOIN dbo.tblCustomer 
ON dbo.AfterHoursParameterSetup.Customer_id = dbo.tblCustomer.Customer_id 
FULL JOIN dbo.tblDriverType 
ON dbo.AfterHoursParameterSetup.DeviceMasterID = dbo.tblDriverType.DriverType_id 
FULL JOIN dbo.tblGroups 
ON dbo.AfterHoursParameterSetup.DeviceMasterID = dbo.tblGroups.Group_id 
FULL JOIN dbo.tblDevices 
ON dbo.AfterHoursParameterSetup.DeviceMasterID = dbo.tblDevices.device_id 
ORDER BY dbo.AfterHoursParameterSetup.Customer_id ASC 

有另一種方式來構建這個查詢,這樣我可以消除NULL值? dbo.AfterHoursParameterSetup.DeviceMasterID將所有內容鏈接在一起,但是該列使用來自三個不同表的值,因此,在沒有匹配值的情況下,對於在沒有匹配連接值的情況下選擇的所有其他列,將返回NULL。

+3

一個你用這個查詢得到的結果和你想要得到的結果的例子可能會讓你的意圖更好一些。 –

+0

使用INNER JOIN如果你不想NULL表的值爲 – hoaz

+0

對不起,我是noob。我在查詢中得到了我想要的結果,但除了列本身(即只有dbo.tblDevices.device_id有條目的行),每列都有NULL條目的行。我認爲這是因爲dbo.AfterHoursParameterSetup.DeviceMasterID不能總是映射到相關的表。但如果我不使用FULL,則無法完成第二和第三個連接。 –

回答

0

如果我理解你的問題,你想交叉表。如果是這樣用戶內部加入。

SELECT dbo.AfterHoursParameterSetup.Customer_id 
    , dbo.tblCustomer.Company 
    , dbo.tblDevices.device_id 
    , dbo.AfterHoursParameterSetup.DeviceMasterID 
    , dbo.tblDriverType.DriverType 
    , dbo.tblGroups.GroupName 
    , dbo.AfterHoursParameterSetup.ReportBy 
    , dbo.AfterHoursParameterSetup.TripTimeFilter 
    , dbo.AfterHoursParameterSetup.chkWeekEndTravel 
    , dbo.AfterHoursParameterSetup.WeekdayStart 
    , dbo.AfterHoursParameterSetup.WeekDayEnd 
    , dbo.AfterHoursParameterSetup.WeekEndFrom 
    , dbo.AfterHoursParameterSetup.WeekEndTo 
    , dbo.AfterHoursParameterSetup.ReportType 
FROM dbo.AfterHoursParameterSetup 
    INNER JOIN dbo.tblCustomer ON dbo.AfterHoursParameterSetup.Customer_id = dbo.tblCustomer.Customer_id 
    INNER JOIN dbo.tblDriverType ON dbo.AfterHoursParameterSetup.DeviceMasterID = dbo.tblDriverType.DriverType_id 
    INNER JOIN dbo.tblGroups ON dbo.AfterHoursParameterSetup.DeviceMasterID = dbo.tblGroups.Group_id 
    INNER JOIN dbo.tblDevices ON dbo.AfterHoursParameterSetup.DeviceMasterID = dbo.tblDevices.device_id 
ORDER BY dbo.AfterHoursParameterSetup.Customer_id ASC 
相關問題