mysql - 多列上没有空值的 SQL 连接

标签 mysql sql join left-join mariadb

我是一个 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/

相关文章:

sql - 选择A中存在但B中不存在的数据

mysql - 在查询中从子表获取串联行的更好方法是什么?

php - 序列化(数据)的哪个mysql列类型?

php - 如何使用外键连接 3 个表

带有派生表的 SQL Server 查询产生语法错误

mysql - SQL SELECT SUM 所有行作为总计

MySQL:加入联合表

arrays - Postgres - 无法加入 UUID 上的 Json 数组值

mysql - MySQL 初学者指南

php - 我的 INSERT INTO 查询不起作用