SQL连接多列上没有空值

时间:2018-03-18 12:18:07

标签: mysql sql join left-join mariadb

我有点像SQL菜鸟,请原谅我,如果我咆哮错误的树!这就是问题所在:

我有一个名为' networkdata'一些网络流量数据。该表有一列名为MAC_Source,一列名为MAC_Dest,每列都包含MAC地址。

我有第二张名为“已知图片”的表格。它包含两列,一列带有MAC地址,另一列带有“友好”列。名。

请注意,并非所有' networkdata'桌子位于' knownmacs'表

我想要做的是创建一个将返回“网络数据”的查询。将MAC_Source列中的MAC地址和MAC_Dest列替换为友好名称WHERE KNOWN - 其中MAC地址不会出现在knownmacs表中我想要返回的每列中的原始值。我不想替换networkdata表中的数据,只返回一个上面替换数据的查询。

以视觉方式向您展示:

表networkdata:

MAC_Address       | Friendlyname
-------------------------------------------
AA:BB:CC:DD:EE:FF   Computer 1
66:55:44:33:22:11   Computer 2

表knownmacs:

MAC_Source        | MAC_Dest          | Other cols
---------------------------------------------------
Computer 1          FF:EE:DD:CC:BB:AA   Other data
11:22:33:44:55:66   Computer 2          Other data

查询结果:

<ul class="movie-timing mon-timings" ng-repeat="timing movies.monTimings">

我已经为MAC_Source尝试了LEFT JOIN,但我只获得了两个额外的列,并且不知道如何组合(或替换或其他)只获得一列。然后,我不知道如何做第二栏...

希望有意义,如果没有,请直接询问更多细节!如果这有任何不同,我会使用MariaDB 5.

非常感谢,

Thinqer。

2 个答案:

答案 0 :(得分:0)

您正在寻找left joincoalesce()

select coalesce(kms.name, kms.mac_source) as mac_source,
       coalesce(kms.name, kms.mac_dest) as mac_dest,
       . . .
from networkdata nd left join
     knownmacs kms
     on nd.mac_source = kms.mac left join
     knownmacs kmd
     on nd.mac_dest = kms.mac;

答案 1 :(得分:0)

感谢戈登 - 在您的解决方案中只有一些拼写错误,但除此之外它完全符合预期!

修改如下:

select coalesce(kms.name, nd.mac_source) as mac_source,
       coalesce(kmd.name, nd.mac_dest) as mac_dest,
       . . .
from networkdata nd left join
     knownmacs kms
     on nd.mac_source = kms.mac left join
     knownmacs kmd
     on nd.mac_dest = kms.mac;