我正在寻找一种方法来获得3个表之间的差异。我不能做的主要任务是比较一个列表形式的表,并取决于它包含什么,它与2列的表b和c相比较。 一个例子阐明我想要做的事:比较一列与其他2列
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的Hostname中,我将它与其他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的主机名列中。
#EDIT1:
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
由于数据提前
如果'A.HostName'与其他两个表中的'HostName'和'Name'都不匹配,会发生什么?输出应该是什么? –
我们将看到IpAddress和HostName的数据,在TableB和TableC下我们将有一个“0”,并在表A下我们将有“1” – JoSav
为了澄清,我的意思是当'A.IPAddress'匹配无论是“B.IPAddress”还是“C.IPAddress”,但相应的“A.HostName”都不匹配。因此,如果你所说的话仍然存在,输出将包含该IP地址的多个条目,其中一个使用“TableA = 1”和“TableB = TableC = 0”,其他使用“TableA = 0”并且“TableB = 1”或“TableC = 1”(或两者)。那是对的吗? –