我正在寻找一种方法来获取 3 个表之间的差异。我不能做的主要任务是比较表 a 的列并取决于它包含的内容,它与 2 列上的表 b 和 c 进行比较。一个例子将阐明我正在尝试做的事情:
Table A:
IpAddress |HostName
10.10.01.10 | somethingtada
255.255.255.1| something.else
Table B:
IpAddress |HostName |Name
10.10.01.10 |somethingtada.tada |somethingtada
Table C:
IpAddress |HostName |Name
255.255.255.1| something.else |something
1.1.1.1 | blabla.tada |tada
我需要一张表格来显示这样的数据
IpAddress |HostName |TableA|TableB|TableC
10.10.01.10 |somethingtada.tada|1 |1 |0
255.255.255.1|something.else |1 |0 |1
1.1.1.1 |blabla.tada |0 |0 |1
所以如果它不够清楚,当我有一个“。” 在 TableA 的 hostName 列中(这种情况总是发生在 tableA 中)我将它与 Hostname 与其他表进行比较。但如果没有“。” 在 TableA 的主机名中,我将其与其他 2 个表的列名称进行比较。
我现在拥有的是:
select IPAddress, HostName,
SUM(case when tbl = 'a' then 1 else 0 end) TableB,
SUM(case when tbl = 'b' then 1 else 0 end) TableC,
SUM(case when tbl = 'c' then 1 else 0 end) TableA
from
(
select IPAdress, HostName,'a' tbl
from TableB
union all
select IPAdress, HostName,'b' tbl
from TableC
union all
select IPAdress, HostName,'c' tbl
from TableA
) d
group by IPAddress, HostName
它运作良好,但我不知道如何在其他表上进行比较取决于是否有“。” 在 TableA 的主机名列中。
#编辑1:
Table A:
IpAddress |HostName
10.10.01.10 | somethingtada
255.255.255.1| something.else
255.10.10.1 | bliblio
1.1.1.1 | tada
2.2.2.2 | tada3.tada
2.2.2.2 | tada5.tada
Table B:
IpAddress |HostName |Name
10.10.01.10 |somethingtada.tada |somethingtada
255.1.1.1 |test3.test |test3
126.126.126.1|test4.test |test4
2.2.2.2 |tada5.tada |tada5
Table C:
IpAddress |HostName |Name
255.255.255.1| something.else |something
1.1.1.1 | blabla.tada |blabla
255.1.1.1 | test3.test |test3
3.3.3.3 | test5.test |test5
我需要一张表格来显示这样的数据
IpAddress |HostName |TableA|TableB|TableC
10.10.01.10 |somethingtada.tada|1 |1 |0
255.255.255.1|something.else |1 |0 |1
1.1.1.1 |blabla.tada |1 |0 |1
255.10.10.1 |blibio |1 |0 |0
255.1.1.1 |test3.test |0 |1 |1
126.126.126.1|test4.test |0 |1 |0
2.2.2.2 |tada3.tada |1 |0 |0
3.3.3.3 |test5.test |0 |0 |1
2.2.2.2 |tada5.tada |1 |1 |0
提前致谢