2017-03-20 2 views
0

Ich habe zwei Tabellen, interne und externe. Beide Tabellen haben die gleichen Spalten viz. Titel, Name, Adresse, Id, RefNo, MergeRefNo, StatusSQL Joins ADODB

Angenommen, die 'externe' Tabelle hat folgende Daten:

<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>

Und die 'Internal' Tabelle hat Daten wie unten :

<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>

Die Anforderung ist, wo die IDs in beiden Tabellen gleich sind und der Status 'A' (oder) RefNos gleich und Status in ('A', 'M') ist, Daten in 'Intern' sollten 'Extern' überschreiben.

Also, im obigen Beispiel, da beide D1 in beiden Tabellen gemeinsam ist, sollte "Weiß" durch "John" ersetzt werden. Außerdem sollte ‚Rita‘ mit ‚Blue‘ überschrieben werden, da Refnos gleich ist (dh 100_B, obwohl IDs unterscheiden)

Also schrieb ich die unten stehende Abfrage

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 

aber wenn es Wert in ‚externen‘ (z. B. XYZ), die in Intern durch "Null" -Daten ersetzt werden müssen, schlägt die obige Abfrage wegen IsNull fehl. Wie könnte ich tatsächlich die "internen" Tabellenwerte verwenden, die beide Join-Bedingungen erfüllen (d. H. IDs sind gleich (oder) Refnos sind gleich).

(Apologies für schlechte Formatierung)

(Wie in Abfrage erwähnt, nicht in der Lage, den Filter zu verwenden, in Joinbedingung in ADODB .. irgendwelche Hinweise?)

Vielen Dank!

Antwort

0

Ich habe einen Weg gefunden, indem ich die zwei Abfragen aufspalte und sie mit UNION verbinde.

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') 

Es funktioniert wie erwartet, jedoch gibt es für den Fall, gibt bessere Möglichkeiten, lassen Sie mich freundlich wissen.

Dank