我有两张桌子,里面的和外面的。两个表都有相同的列,即。标题,名称,地址,Id,RefNo,MergeRefNo,状态
假设“外部”表有以下数据:
<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 </td>
<td style="width: 86px;">NULL </td>
<td style="width: 47px;">A </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 </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 </td>
<td style="width: 86px;">NULL </td>
<td style="width: 47px;">A </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 </td>
</tr>
</tbody>
</table>
要求是,当is在两个表中相同,状态是'A‘(或) RefNos是相同的,状态在('A','M'),’内部‘中的数据应该覆盖’外部‘。
因此,在上面的示例中,由于这两个D1在两个表中都很常见,所以应该将'White‘替换为'John’。此外,“Rita”应该被“Blue”覆盖,因为Refnos是相等的(即100_B,尽管ID不同)。
所以我写了下面的查询
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但是,当内部中需要用'null‘数据替换'external’(例如XYZ)中的值时,由于IsNull,上面的查询会失败。我如何实际使用满足两个连接条件(即ID是相同的(或) Refnos是相同的)的“内部”表值。
(对格式不佳表示歉意)
(如查询中所述,无法在ADODB中的联接条件下使用筛选器。有线索吗?)
非常感谢!
发布于 2017-03-21 05:51:43
我找到了一种方法,通过拆分这两个查询并使用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')不过,如果有更好的选择,请让我知道。
谢谢
https://stackoverflow.com/questions/42899512
复制相似问题