我是一个 SQL 菜鸟,所以如果我说错了,请原谅!问题是这样的:
我有一个名为“networkdata”的表,其中包含一些网络流量数据。该表有一列称为 MAC_Source,一列称为 MAC_Dest,每一列都包含 MAC 地址。
我有第二个表,名为“knownmacs”,其中包含两列,一列包含 MAC 地址,一列包含“友好”名称。
请注意,并非“networkdata”表两列中的所有 MAC 地址都在“knownmacs”表中。
我想要做的是创建一个查询,该查询将返回“networkdata”表,其中 MAC_Source 列中的 MAC 地址和 MAC_Dest 列替换为已知的友好名称 - MAC 地址不会出现在knownmacs 表中,我希望返回每列中的原始值。我不想替换网络数据表中的数据,只需返回一个查询,其中替换的数据如上所述。
直观地向您展示:
表网络数据:
MAC_Source | MAC_Dest | Other cols
---------------------------------------------------
AA:BB:CC:DD:EE:FF FF:EE:DD:CC:BB:AA Other data
11:22:33:44:55:66 66:55:44:33:22:11 Other data
表knownmacs:
MAC_Address | Friendlyname
-------------------------------------------
AA:BB:CC:DD:EE:FF Computer 1
66:55:44:33:22:11 Computer 2
查询结果:
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
我尝试了 MAC_Source 的 LEFT JOIN,但我只得到两列,并且不知道如何组合(或替换或其他方式)以获得一列。然后我不知道如何做第二列...
希望这是有道理的,如果没有,请询问更多详细信息!如果这有什么区别的话,我正在使用 MariaDB 5。
提前非常感谢,
Thinqer。
最佳答案
您正在寻找左连接
和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;
关于mysql - 多列上没有空值的 SQL 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49347781/