为什么两个表之间的完全外连接结果中有NULL?

2023-12-01

我试图从两个表中获取唯一值,这两个表都只有一列称为域。

DDL:

create table domains_1 (domain varchar);
create table domains_2 (domain varchar);

DML:

insert into domains_1 values ('example_1.com'), ('example_2.com');
insert into domains_2 values ('example_2.com'), ('example_3.com');

有几种方法可以做到这一点,我决定使用完整的外部联接。

select case when a.domain is null then b.domain
            when b.domain is null then a.domain
       end as unique_domains
from domains_1 as a full outer join domains_2 as b on a.domain = b.domain;

令我惊讶的是,有null在结果中除了独特的域之外。

enter image description here

我可以再添加一层select排除空值,如下所示:

select * from
(select case when a.domain is null then b.domain
            when b.domain is null then a.domain
       end as unique_domains
from domains_1 as a full outer join domains_2 as b on a.domain = b.domain) t
where unique_domains is not null;

这怎么可以null首先出现在结果中吗? 有没有更好的方法去除null从结果来看?


Your CASE表达式没有ELSE,所以它默认为 null:

case when a.domain is null then b.domain
     when b.domain is null then a.domain
     ELSE NULL -- implicitly
end as unique_domains

值“example_2.com”具有匹配项,因此 a.domain 和 b.domain 都等于“example_2.com”且不为空。所以,两者WHEN不匹配并且ELSE NULL被申请;被应用。

至于“更好的方法”:我可能会使用

select coalesce(a.domain, b.domain) as domain
from domains_1 as a full outer join domains_2 as b on a.domain = b.domain
where a.domain is null or b.domain is null;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么两个表之间的完全外连接结果中有NULL? 的相关文章

  • 将数据推送到 Heroku 时出错:时区位移超出范围

    我运行以下命令将本地数据库的内容推送到 Heroku heroku db push app my app 在我的家用计算机上 这可以完美地工作 但在我的工作计算机上 我收到此错误 Taps 服务器错误 PGError 错误 时区位移超出范围
  • mysql 将 varchar 字段排序为整数

    我的表中有一个 varchar 字段 我想对其进行排序 但我需要将此字段作为整数处理 意思是如果按文本排序 顺序是 19 2 20 但我想得到正确的顺序 2 19 20 谁能帮我 我不知何故没有设法运行查询CAST 我总是得到Error C
  • 第一次如何配置postgresql?

    我刚刚安装了 postgresql 并在安装过程中指定了密码 x 当我尝试做的时候createdb并指定我收到消息的任何密码 createdb 无法连接到数据库 postgres 致命 用户密码身份验证失败 同样适用于createuser
  • 当向数据库表添加一列时,如何让 datagridview 显示更改?

    我在 Visual Studio 的项目中创建了一个数据集 该数据集指向我的数据库中的一个表 然后将 datagridview 控件绑定到它 现在我打开数据库并向数据库中的表添加另一列 然后我打开数据集并更新其配置以包含更改 然后我想更新
  • Oracle SQL 列转行(无需 UNPIVOT)

    我目前拥有的 Team User Apples Oranges Pears Red Adam 4 5 6 Red Avril 11 12 13 Blue David 21 22 23 需要什么 Team User Product Count
  • 在 apex 中根据 2 种不同类型的用户进行自定义身份验证

    我有一种身份验证方案 目前仅验证用户是否在一个表中 即雇主表中 现在我希望这个身份验证方案来验证用户是雇主还是雇员 并且根据他们是雇主还是雇员 它应该将他们重定向到不同的页面 首先 我如何在身份验证脚本中包含第二个表 我最大的问题是 当员工
  • 对于 XML 路径:如何将属性和值保留在同一节点中

    我在使用时遇到一些问题FOR XML PATH 我的情况是 我运行了如下脚本 属性CCY和价值AMOUNT合并到同一个节点 脚本1 SELECT USD AS Amount Ccy 123000 AS Amount Foo AS Foo F
  • 如果存在具有唯一值的行,则更新,否则插入

    我有一个 URL 表 他们包含 id int 主键 url 字符不同 唯一 内容特征各不相同 最后分析日期 我想创建触发器或其他东西 规则可能是 因此每次我从 java 程序中进行插入时 如果存在具有此类 URL 的行 它就会更新一些单行
  • T-SQL:检查电子邮件格式

    我有这样的场景 我需要物理数据库中的数据完整性 例如 我有一个变量 email address VARCHAR 200 我想检查一下值是否为 email address是电子邮件格式 有人知道如何检查 T SQL 中的格式吗 非常感谢 我使
  • 使用递归 CTE 遍历父/子树?

    我被 cte 困住了 我想要一个查询 其中第一个父级为空 上一个父级的子级将成为下一个父级的父级 依此类推 WITH RESULT PARENT CHILD TNAME LEVEL AS anchor SELECT E PARENT GEN
  • 如何使 Postgres Copy 忽略大 txt 文件的第一行

    我有一个相当大的 txt 文件 9gb 我想将此 txt 文件加载到 postgres 中 第一行是标题 后面是所有数据 如果我直接 postgres COPY 数据 标头将导致数据类型与我的 postgres 表不匹配的错误 因此我需要以
  • 从存储过程执行SQL Server代理作业并返回作业结果

    需要有一个存储过程来调用 SQL Server 代理作业并返回作业是否成功运行 到目前为止我已经 CREATE PROCEDURE MonthlyData AS EXEC msdb dbo sp start job N MonthlyDat
  • 如何从 PostgreSQL 数据库中删除表*或*视图?

    我在 PostgreSQL 数据库中有一个表或视图的名称 需要在单个 pgSQL 命令中删除 我怎样才能负担得起 我能够选择表单系统表来查找是否有任何具有此类名称但仍保留程序部分的表 SELECT count FROM pg tables
  • LINQ to Entities 无法识别“System.String ToString()”方法,并且该方法无法转换为存储表达式

    我正在将一些内容从一台 mysql 服务器迁移到一台 sql 服务器 但我不知道如何使这段代码工作 using var context new Context foreach var item in collection IQueryabl
  • SQL:从多个表中获取 USER 表中用户记录的计数。最好的方法是什么?

    我有4个SQL Server 2008版本 表 1 USER to store user information Fields UserId UserName 2 FILES to store files uploaded by user
  • 从 LEFT OUTER JOIN 中删除重复项

    我的问题非常类似于限制 LEFT JOIN https stackoverflow com questions 757957 restricting a left join 有一个变体 假设我有一个表 SHOP 和另一个表 LOCATION
  • 在 Postgres 中为特定查询设置 work_mem

    我正在使用一个委托给 JDBC 驱动程序的库PostgreSQL 而且有些查询非常复杂 需要更多内存 我不想设置work mem对于所有查询来说都是大的 只是这个子集 问题是执行以下代码会导致错误 pseudo code for what
  • 从关键字后的文本中提取字符串

    我想从 SQL 字段中关键字后面的文本中提取内容 我有一个名为Description在表中 该字段的内容是 asdasf 关键字 狗 aeee 关键字 猫 ffffaa 关键词 狼 我想提取并保存 关键字 之后的文本 在本例中dog cat
  • 如何在oracle sql查询中提取括号之间的字符串

    我正在尝试从字符串中提取括号之间的值 我怎样才能做到这一点 例如 我有这个字符串 Gupta Abha 01792 我想得到括号之间的结果 即 01792 我正在尝试编写这样的查询 select substr Gupta Abha 0179
  • 将 .sql 文件导入 SQLite

    我正在尝试将大型 sql 文件导入 SQLite db 文件 但出现以下错误 sqlite gt read smsCorpus en 2012 04 30 sql Error near line 23 near COMMENT syntax

随机推荐