3表之间的差异

JoS*_*Sav 1 sql

我想比较一个本地数据库中的3个表.

我的问题是我需要知道哪些表具有相同的数据,哪些表缺少数据.

例:

Table A:
IpAddress    |HostName
10.10.01.10  | something
255.255.255.1| something else

Table B:
IpAddress    |HostName
10.10.01.10  |something

Table C:
IpAddress    |HostName
255.255.255.1| something else
1.1.1.1      | blabla
Run Code Online (Sandbox Code Playgroud)

我需要有一个表格向我展示这样的数据

IpAddress\HostName\TableA\TableB\TableC
10.10.01.10\something\1\1\0
255.255.255.1\something else\1\0\1
1.1.1.1\blabla\0\0\1
Run Code Online (Sandbox Code Playgroud)

Tar*_*ryn 5

您可以使用UNION ALL从子查询中的三个表中获取数据,然后使用带有CASE表达式的聚合函数来计算ipaddress和hostname在每个表中出现的次数:

select ipaddress, HostName,
    SUM(case when tbl = 'a' then 1 else 0 end) tablea, 
    SUM(case when tbl = 'b' then 1 else 0 end) tableb,
    SUM(case when tbl = 'c' then 1 else 0 end) tablec
from
(
    select ipaddress, HostName, 'a' tbl
    from tablea
    union all
    select ipaddress, HostName, 'b' tbl
    from tableb
    union all
    select ipaddress, HostName, 'c' tbl
    from tablec
) d
group by ipaddress, HostName;
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle with Demo