我有点像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。
答案 0 :(得分:0)
您正在寻找left join
和coalesce()
:
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;