【发布时间】:2019-02-16 10:34:42
【问题描述】:
我有 2 个 SQL Server 数据库表,我正在为使用 Crystal Reports 设计一个报表。第一个表格列出了所有受理申请的办公室,第二个表格列出了所有申请。
我正在设计的报告应该显示所有办公室的标题(需要存在,因为在 CR 中的每个部分下面都有一个单独的子报告)。然后,该报告提供年初至今已收到的任何申请的总数。在我添加 WHERE 子句以限制 2018 年的申请之前,SQL 查询工作正常 - 然后它只向我显示 2018 年有申请的办公室。
根据我在搜索答案时发现的情况,一旦添加了右侧表上的日期条件,SQL 就会将 OUTER JOIN 视为 INNER JOIN,所以我相信是这种情况。但是,如果我遗漏了日期标准,那么显然我会收到所有申请……永远。我试图弄清楚我是否遗漏了一些明显的东西,或者我是否需要使用不同类型的 SQL 查询来完成我正在寻找的东西。
这是我目前正在处理的查询,如果有任何关于如何完成这项工作的建议,我将不胜感激。
SELECT office.src_office_id
FROM source_office office
FULL OUTER JOIN credit_application app ON app.src_office_id = office.src_office_id
WHERE office.src_office_id IS NOT NULL OR
(app.delete_app=0
AND (app.data_entry_complete >= {ts '2018-01-01 00:00:00'}
AND app.data_entry_complete < {ts '2018-09-11 00:00:00'}))
ORDER BY office.src_office_id ASC
【问题讨论】:
-
据我了解,您需要外部连接。但是,通过说
office.src_office_id IS NOT NULL,您基本上可以使其成为正确的连接,但第二个条件捕获的条目除外。您可能想删除NOT -
如果您编辑了您的问题并描述了架构(如
CREATE TABLE语句)以及示例数据(如INSERT语句)以及您对该示例的期望结果,这将更容易为您提供帮助数据。 -
嗨。了解返回时的左连接:行上的内连接以及由空值扩展的不匹配的左表行。作为左连接的一部分,始终知道您想要什么内连接。在您拥有的左连接之后,需要右表列不为空的地方会删除任何由空值扩展的行,即仅在行上保留内连接,即“将外连接变为内连接”。
-
这是一个常见问题解答。请始终在谷歌上搜索您的问题/问题/目标的许多清晰、简洁和特定的版本/措辞,带和不带您的特定字符串/名称,并阅读许多答案。将您发现的相关关键字添加到搜索中。如果您没有找到答案,请发布,使用一个变体搜索您的标题和关键字作为您的标签。请参阅向下投票箭头鼠标悬停文本。
-
@NielsNet 不是那个 NULL 测试删除了空扩展行,它是 OR 要求正确的表列是非空的。 (请参阅已接受的答案。)当然,通常是右表列的 IS NOT NULL,这是这些常见问题解答“将外部联接变为内部联接”的方式。
标签: sql sql-server outer-join