我制作了一个脚本,它从交换机端口获取 mac 地址并将它们放入数据库中。我将它插入到导入表中,稍后将复制到实际表中。一切都很好。现在我正在编写查询以查找哪些 mac 地址是新的。所以,我需要导入表中不在目标表中的行。左外连接是有意义的:
select *
from SwitchportMac_import i
left outer join SwitchportMac sm
on sm.switch = i.switch and sm.port = i.port and sm.mac = i.mac
Run Code Online (Sandbox Code Playgroud)
这也返回i匹配 in 的行sm。当然,我可以添加一个,where sm.id is null但我大吃一惊。
所以要么:
如果是第一个,我会转储 DDL 并弄清楚,但我害怕这是第二个。是否存在外部关键字只是为了让我感到困惑?
Mar*_*ith 11
LEFT JOIN并且LEFT OUTER JOIN是同义词,所以很抱歉,但听起来像是选项 2 :-)
“外部”连接(保留不匹配的行)与“内部”连接(没有)相反。
外连接有三种风格。Left、Right、Full(取决于要保留哪些不匹配的行)。
由于 SQL 没有用于任何其他类型的连接(例如左/右反半连接)的直接连接语法,因此允许OUTER关键字在语法中是可选的是没有歧义的。
该LEFT ANTI SEMI JOIN听起来像你所期望的LEFT OUTER去做。您可以通过多种方式实现它。通常NOT EXISTS是首选,但您可以LEFT OUTER JOIN结合使用IS NULL以仅保留不匹配的那些。
这一切都在文档的“联接类型”部分得到确认
LEFT [ OUTER ]指定左表中不满足联接条件的所有行都包含在结果集中,并且将其他表的输出列设置为NULL除内联接返回的所有行之外。
周围的方括号[OUTER]只是表示这是可选的,但仍然适用相同的定义。
| 归档时间: |
|
| 查看次数: |
1405 次 |
| 最近记录: |