【问题标题】:How can I find things in a table but not in the other in both directions? [closed]我怎样才能在一个表中找到东西,但在另一个方向上却找不到? [关闭]
【发布时间】:2022-06-22 07:55:13
【问题描述】:

一份合同可以有多次付款。 给定两个表 t1 和 t2,它们的 contractID 和 paymentID 列都为 nvarchar(255)

  1. 我想找出一张表中的合同,但不是 其他两个方向。

    我想到了全外连接,比如

    SELECT *
    FROM t1 FULL OUTER JOIN t2
    ON t1.contractID = t2.contractID AND t1.paymentID = t2.paymentID
    

    但是它返回的结果包含了内连接的结果。所以 你会使用什么查询?

  2. 对于出现在两个表中的每个合同:

    我想在一张表中查找付款,但在另一张表中不查找 在两个方向。你会使用什么查询?你能自动化 迭代出现在两个表中的合约?

【问题讨论】:

  • 您的完整外连接缺少 ON 子句。老实说,只需将您的 WHERE 更改为 ON,它应该完全按照您所说的去做。
  • unionexcept 的结果会更简单。请将问题限制为每个问题一个问题。
  • @SeanLange 我的错字。但是全外连接的结果包含内连接的结果。那么你会使用什么查询呢?
  • @Stu 你能详细说明一下吗?也许发布一个答案?
  • 请澄清一下 - 您是否需要不包括匹配行的查询?然后你可以使用where t1.contractid is null or t2.contractid is null这样的条件。

标签: sql-server join


【解决方案1】:

为您的第一个问题举一个例子,这可能涵盖您的第二个问题,您可以使用except 找出两组之间的差异:

with a as (
    select id1, id2 from t1
    except 
    select id1, id2 from t2
), b as (
    select id1, id2 from t2
    except 
    select id1, id2 from t1
)
select * from a
union
select * from b;

看到这个example DB<>Fiddle

【讨论】:

    猜你喜欢
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    • 2014-12-04
    • 2016-04-07
    • 2020-02-18
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多