当前位置: 首页 > 知识库问答 >
问题:

如果值为NULL,则左连接,否则内连接

长孙淳
2023-03-14

我想要两个表上的连接,如果值为NULL,则复制左连接行为,如果值为NOULL,则复制内连接行为。例如,对于表:

t1(val) AS (VALUES (NULL)),
t2(val) AS (VALUES ('a'), ('b'))

该联接将返回一行值(NULL,NULL)(根据左联接)。对于表格:

t1(val) AS (VALUES ('c')),
t2(val) AS (VALUES ('a'), ('b'))

不会返回任何行(根据内部联接)。对于表格:

t1(val) AS (VALUES ('a')),
t2(val) AS (VALUES ('a'), ('b'))

返回值为('A','A')的单行(根据两种联接类型)。

最有效的方法是什么?

编辑:作为效率最大化的一部分,我正在寻找一个不进行后期筛选的查询(即使用WHERE子句)。

共有1个答案

张积厚
2023-03-14

你可以用这个:

SELECT t1.val, t2.val
FROM t1
LEFT JOIN t2
ON t1.val = t2.val 
WHERE t1.val IS NULL OR t1.val = t2.val;

或者:

SELECT NULL AS val1, NULL AS val2
FROM t1 
WHERE val IS NULL 
UNION ALL 
SELECT t2.val, t2.val 
FROM t2
INNER JOIN t1 ON t1.val = t2.val;
 类似资料:
  • 我想返回每个行,并为和提供空值,如果它们没有。当我执行此查询时,我得到空结果。如果我使用而不是,我得到不正确的结果。如何过滤左连接,以便如果没有匹配,我仍然得到返回的p行与和的空值? 注:我在末尾添加了,仅用于测试目的。

  • 问题内容: 我有一个类似下面的查询,并列出了它的输出: o / p: 我想重新编写查询,以便获得如下输出: 有人可以帮忙吗? 问题答案: 在11g中使用Listagg()或在10g中使用WM_Concat():

  • 问题内容: 我想知道是否可以选择列的值(如果该列存在),否则选择null。换句话说,当列不存在时,我想“举起” select语句来处理这种情况。 注意,我正在巩固我的数据模型和设计。我希望在接下来的几周中排除这种逻辑,但是我真的想超越这个问题,因为数据模型修复比我现在想解决的要耗费更多时间。 另请注意,我希望能够在一个查询中执行此操作。所以我不是在寻找像这样的答案 首先检查子查询中的列。然后修改您

  • 所以我有了这个数据表 正如您所看到的,如果值为null,则获取前一个值,但是如果您查看第三行,我将获得一个null,我假设是因为它获取了第二行的值,但是当它仍然没有更新时(因此仍然是来自原始dataframe的null)。 我有点不知道该怎么做。有人帮忙吗?

  • 我试着通过邮寄的方式发送文件。在此之前,我使用http连接,一切正常。但是现在我的PHP文件中的返回一个空数组。 这是我的卷曲日志:

  • 我需要将此查询复制到JPA CriteriaBuilder代码中: 这是我的代码: