0

我们有下表,其中包含deviceIdcustomerPrefix列。

tblDeviceInfo: 
deviceId       customerPrefix
1             ABC
2             XYZ

基于客户前缀,我们也有设备表,我在下面只列出了 2 个,但是我们有太多的,上面的 tblDeviceInfo 表可以包含许多不同的客户前缀,我知道这是一个不好的做法,但这就是我们在时刻,我们必须暂时使用它。

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 取回所有东西

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

这不太正确,但无论如何可以通过动态 sql 或任何其他方式实现这一点?

谢谢

4

2 回答 2

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

将对结果进行大量空值检查,但您应该能够在一个(昂贵的)查询中进行检查。

于 2012-10-03T11:02:31.203 回答
0

您可以在子查询中将union所有tblDEVICE内容与 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
于 2012-10-03T11:05:24.390 回答