0

と列を含む次のテーブルがdeviceIdありcustomerPrefixます。

tblDeviceInfo: 
deviceId       customerPrefix
1             ABC
2             XYZ

顧客プレフィックスに基づいて、デバイス テーブルもあります。以下に 2 つだけリストしましたが、それらが多すぎて、上記の tblDeviceInfo テーブルに多くの異なる customerPrefix を含めることができます。これが悪い習慣であることはわかっていますが、これがしばらくの間、それを処理する必要があります。

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でこのように1つのSQLですべてを取り戻します

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

これはまったく正しくありませんが、動的SQLまたはその他の方法でこれを達成する方法はありますか?

ありがとう

4

2 に答える 2

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 に答える
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

結果に対して多くの null チェックが行われますが、1 つの (高価な) クエリでそれを行うことができるはずです。

于 2012-10-03T11:02:31.203 に答える