我们的下表包含deviceId
和customerPrefix
列。
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#app中)并根据客户前缀从相关表中获取设备详细信息, 我想知道是否有一种基于列值加入表的方法,并使用动态sql以一个sql返回所有内容
@sql = 'Select deviceId, customerPrefix From tblDeviceInfo i
INNER JOIN tblDevice' + d.customerPrefix + ' d ON d.deviceId = i.deviceId'
这不是很正确,但无论如何使用动态sql或其他任何方式实现这一目标?
由于
答案 0 :(得分: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
结果会有很多空检查,但你应该可以在一个(昂贵的)查询中进行。
答案 1 :(得分:0)
您可以union
子查询中的所有tblDEVICE
并将其与信息表一起加入
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