【问题标题】:SQL to find where not exists on one tableSQL查找一张表上不存在的地方
【发布时间】:2022-01-26 22:00:05
【问题描述】:

我想在 USERS 表中查找在 ACCOUNT 表中没有至少 1 个 ACCOUNT 的任何 COMPANYID/USERID 组合的列表。 在下面的示例中,ABC/USER3 是唯一适合此的组合。其余的在 Account 表中至少有 1 个 ACCOUNT。

表格:用户

COMPANYID USERID ACCOUNT
ABC USER1 111
ABC USER1 222
ABC USER1 333
ABC USER2 222
ABC USER2 444
ABC USER2 888
ABC USER3 333
ABC USER3 666

表格:帐户

ACCOUNT
111
222
444
555
777

【问题讨论】:

  • 你尝试了什么?

标签: sql except


【解决方案1】:

使用左连接,这些将有 0 个匹配的帐户。

SELECT USR.COMPANYID, USR.USERID
FROM USERS USR
LEFT JOIN ACCOUNT ACC ON ACC.ACCOUNT = USR.ACCOUNT
GROUP BY USR.COMPANYID, USR.USERID
HAVING COUNT(ACC.ACCOUNT) = 0

【讨论】:

    【解决方案2】:

    您正在确实存在的独家列表中寻找不存在的东西;使用 exists 运算符可能是最有效的方法。

    select distinct CompanyId, UserId
    from users u where not exists (
        select userid
        from users u2
        where exists (select * from account a where a.account = u2.account)
        and u2.userid=u.userid
    )
    

    【讨论】:

    • 斯图,这似乎行得通。 (我在 accounts 表上有超过 900K 行,在 users 表上有数百万行)我只需要返回一次不同的 COMPANYID/USERID 组合。添加它有多复杂?
    猜你喜欢
    • 2013-04-14
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多