2012-10-03 29 views
0

我們有下表,其中包含deviceIdcustomerPrefix列。根據列值有條件地加入表

tblDeviceInfo: 
deviceId  customerPrefix 
1    ABC 
2    XYZ 

基於客戶前綴我們也有設備表,我只列舉如下2,但我們有太多的和上面tblDeviceInfo表可以包含很多不同的customerPrefixes,我知道這是一個不好的做法,但這是我們目前所擁有的,我們暫時必須與之合作。

tblDeviceABC 
deviceId   deviceName 
1    NameABC1 
2    NameABC2 

tblDeviceXYZ 
deviceid   deviceName 
1    NameXYZ1 
2    NameXYZ2 

當我查詢tblDeviceInfo(它可以包含相當多的行),我希望能夠得到如下:

deviceId, deviceName, customerPrefix 
1   NameABC1   ABC 
2   NameXYZ1   XYZ 

目前我們得到的一切,從tblDeviceInfo表,開始循環(在C#應用程序中)並根據客戶前綴從相關表中獲取設備詳細信息, 我想知道是否有基於列值加入表的方法,動態sql

@sql = 'Select deviceId, customerPrefix From tblDeviceInfo i 
    INNER JOIN tblDevice' + d.customerPrefix + ' d ON d.deviceId = i.deviceId' 

這是不是很正確,但無論如何實現動態sql或任何其他方式嗎?

謝謝

回答

0

這不只是不好的做法,它是可怕的。

但是,您可能能夠解決的查詢是這樣的:

Select deviceId, customerPrefix From tblDeviceInfo i 
LEFT OUTER JOIN tblDeviceABC dABC ON dABC.deviceId = i.deviceId 
... 
LEFT OUTER JOIN tblDeviceXYZ dXYZ ON dXYZ.deviceId = i.deviceId 

會有很多空的結果檢查的,但你應該能夠使它在一個(昂貴的)查詢。

0

您可以union所有tblDEVICE在子查詢andjoin它與Infor的表,

SELECT b.*, a.customerPrefix 
FROM tblDeviceInfo a 
     INNER JOIN 
     (
      SELECT deviceID, deviceName From tblDeviceABC 
      UNION 
      SELECT deviceID, deviceName From tblDeviceXYZ 
     ) b ON a.deviceID = b.deviceID