2017-03-20 11 views
0

私は内部と外部の2つのテーブルを持っています。 両方のテーブルには同じ列があります。タイトル、名前、住所、ID、REFNO、MergeRefNo、ステータスSQL Join ADODB

'外部' の表は、以下のデータを持っていると仮定します

<table style="width: 351px;"> 
 
    <tbody> 
 
    <tr> 
 
     <td style="width: 38px;">Title</td> 
 
     <td style="width: 43px;">Name</td> 
 
     <td style="width: 59px;">Address</td> 
 
     <td style="width: 25px;">Id</td> 
 
     <td style="width: 52px;">RefNo</td> 
 
     <td style="width: 86px;">MergeRefNo</td> 
 
     <td style="width: 47px;">Status</td> 
 
    </tr> 
 
    <tr> 
 
     <td style="width: 38px;">Mr.</td> 
 
     <td style="width: 43px;">White</td> 
 
     <td style="width: 59px;">123</td> 
 
     <td style="width: 25px;">D1</td> 
 
     <td style="width: 52px;">100_A</td> 
 
     <td style="width: 86px;">NULL</td> 
 
     <td style="width: 47px;">A</td> 
 
    </tr> 
 
    <tr> 
 
     <td style="width: 38px;">Ms.</td> 
 
     <td style="width: 43px;">Rita</td> 
 
     <td style="width: 59px;">234</td> 
 
     <td style="width: 25px;">D2</td> 
 
     <td style="width: 52px;">100_B&nbsp;</td> 
 
     <td style="width: 86px;">NULL&nbsp;</td> 
 
     <td style="width: 47px;">A&nbsp;</td> 
 
    </tr> 
 
    <tr> 
 
     <td style="width: 38px;">Dr.</td> 
 
     <td style="width: 43px;">CP</td> 
 
     <td style="width: 59px;">678</td> 
 
     <td style="width: 25px;">D3</td> 
 
     <td style="width: 52px;">100_C</td> 
 
     <td style="width: 86px;">100_B</td> 
 
     <td style="width: 47px;">M&nbsp;</td> 
 
    </tr> 
 
    </tbody> 
 
</table>

をそして '内部' テーブルは以下のようにデータを持っています:

<table style="width: 351px;"> 
 
    <tbody> 
 
    <tr> 
 
     <td style="width: 38px;">Title</td> 
 
     <td style="width: 43px;">Name</td> 
 
     <td style="width: 59px;">Address</td> 
 
     <td style="width: 25px;">Id</td> 
 
     <td style="width: 52px;">RefNo</td> 
 
     <td style="width: 86px;">MergeRefNo</td> 
 
     <td style="width: 47px;">Status</td> 
 
    </tr> 
 
    <tr> 
 
     <td style="width: 38px;">Mr.</td> 
 
     <td style="width: 43px;">John</td> 
 
     <td style="width: 59px;">XYZ</td> 
 
     <td style="width: 25px;">D1</td> 
 
     <td style="width: 52px;">100_A</td> 
 
     <td style="width: 86px;">NULL</td> 
 
     <td style="width: 47px;">A</td> 
 
    </tr> 
 
    <tr> 
 
     <td style="width: 38px;">Ms.</td> 
 
     <td style="width: 43px;">Blue</td> 
 
     <td style="width: 59px;">CDE</td> 
 
     <td style="width: 25px;">M6</td> 
 
     <td style="width: 52px;">100_B&nbsp;</td> 
 
     <td style="width: 86px;">NULL&nbsp;</td> 
 
     <td style="width: 47px;">A&nbsp;</td> 
 
    </tr> 
 
    <tr> 
 
     <td style="width: 38px;">Dr.</td> 
 
     <td style="width: 43px;">CP</td> 
 
     <td style="width: 59px;">678</td> 
 
     <td style="width: 25px;">D3</td> 
 
     <td style="width: 52px;">100_C</td> 
 
     <td style="width: 86px;">100_B</td> 
 
     <td style="width: 47px;">M&nbsp;</td> 
 
    </tr> 
 
    </tbody> 
 
</table>

IDが両方のテーブルで同じで、ステータスが 'A'(または)RefNosが同じでステータスが( 'A'、 'M')の場合、 'Internal'のデータは 'External'を上書きする必要があります。

上記の例では、両方のテーブルで両方のD1が共通であるため、「白」は「John」に置き換えてください。また、「リタ」は

は、だから私は、以下のクエリ

select isnull(c.title,isnull(b.title,a.title)),isnull(c.initials,isnull(b.initials,a.initials)),isnull(c.forename,isnull(b.forename,a.forename)),isnull(c.surname,isnull(b.surname,a.surname)),isnull(c.id,isnull(b.id,a.id)) 
from external a 
left join internal b on a.id = b.id -- and status = 'a' -- unable to use this in ADO 
left join internal c on c.refno= a.refno -- and status in ('a','m') -- unable to use this in ADO 

を書きましたが、値がであった場合に「外部」(IDが異なるが、すなわち100_B)Refnosが等しいため、「青」で上書きする必要があります内部で 'null'データに置き換える必要があるデータ型(例:XYZ)では、IsNullのために上記のクエリが失敗します。両方の結合条件を満たす(つまりIDが同じ(または)Refnosが同じ)「Internal」テーブル値を実際にどのように使用できますか。

(貧しいフォーマットについて謝罪)

(クエリで述べたように、いずれかの手がかりが.. ADODBで結合条件でフィルタを使用することができない?)

多くの感謝!

答えて

0

2つのクエリを分割してUNIONを使用して結合する方法が見つかりました。

select a.title, a.initials, a.forename, a.surname, a.id 
from internal a 
inner join external b on a.id = b.id 
where a.status = 'a' 
union 
select a.title, a.initials, a.forename, a.surname, a.id 
from internal a 
inner join external b on a.refno = b.refno 
where a.status in ('a','m') 

これは予期したとおりに動作しますが、より良いオプションがある場合は、教えてください。

ありがとうございました