【问题标题】:Cannot filter rows on LEFT JOIN无法过滤 LEFT JOIN 上的行
【发布时间】:2021-09-27 01:08:34
【问题描述】:

我有 SQL 脚本

这里是代码

  UPDATE Companies
    LEFT JOIN abpusers a on a.CompanyId = companies.Id AND a.TenantId IS NOT NULL
SET Companies.TenantId = a.TenantId
WHERE Companies.TenantId = 3;

问题在于我尝试运行它并得到一个错误

[23000][1048] 列 'TenantId' 不能为空

但我有条件AND a.TenantId IS NOT NULL 必须过滤它

我的问题在哪里?

【问题讨论】:

  • 您需要一个INNER JOIN,或者将您的过滤器移动到 where 子句,而不是连接条件。由于您已将 a.TenantId IS NOT NULL 放在联接子句中,因此您将从联接的左侧删除这些行,并且不会完全从更新中过滤这些行

标签: mysql sql database


【解决方案1】:

由于您使用了 LEFT JOIN,因此某些公司行将没有匹配的 abpuser,这将导致 NULL。

您可以通过对同一联接执行 SELECT 来查看它并查看结果,而不是更新。

【讨论】:

    【解决方案2】:

    更新公司

    LEFT JOIN abpusers a on a.CompanyId = companies.Id AND NULLIF(a.TenantId ,' ')  IS NOT NULL
    

    SET Companies.TenantId = a.TenantId

    WHERE Companies.TenantId = 3

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-06
      • 1970-01-01
      • 2014-01-16
      • 2016-09-14
      • 2016-06-01
      相关资源
      最近更新 更多