【问题标题】:LEFT JOIN is NULL conditionLEFT JOIN 为 NULL 条件
【发布时间】:2014-02-05 18:52:29
【问题描述】:

我一直在努力左加入一个条件为 IS NULL 的表。但是查询的结果却是一个NULL数据。

SELECT users.id, employees.id as empid, users.activated_at, users.created_at
FROM employees
LEFT JOIN users on users.login = employees.employeeid
WHERE users.activated_at IS NULL
ORDER BY users.created_at ASC

在有了 sql 语法后,我最终得到了这个查询。我只想获取尚未激活且拥有员工数据的用户。但我总是让员工得到 NULL 用户数据。

【问题讨论】:

  • 如果您不希望员工的用户数据为 NULL,则需要发送INNER JOIN。
  • INNER JOIN 似乎有效。非常感谢。

标签: mysql sql sql-server left-join


【解决方案1】:

如果您不希望员工的用户数据为 NULL,则需要发送INNER JOIN。

SELECT users.id, 
       employees.id AS empid, 
       users.activated_at, 
       users.created_at 
FROM   employees 
       INNER JOIN users 
               ON users.login = employees.employeeid 
WHERE  users.activated_at IS NULL 
ORDER  BY users.created_at ASC 

INNER JOIN 将排除两个表中都不存在的记录。因此,任何没有用户数据的员工都将被排除在外。 LEFT JOIN 不同,因为它将返回第一个表(员工)中的所有匹配记录,无论它们是否与用户匹配(在这些情况下 WHERE 条件仍然为 TRUE),因此有些用户数据将完全为 NULL。

【讨论】:

  • 非常感谢。 INNER JOIN 似乎有效,也感谢您向我提供有关这些联接如何工作的详细信息。
【解决方案2】:

您的 SQL 似乎对我有用:(http://sqlfiddle.com/#!6/0a8ac/1)

【讨论】:

  • 当有没有用户数据的员工时,我认为他的意思是was this。这就是 JOIN 的类型很重要的时候。
  • 你可能是对的,但他确实说“我只想获取尚未激活且拥有员工数据的用户。”鉴于他有一个activated_at 列,我认为当“尚未激活”时它会为空——他甚至在 SQL 中测试它。如果在员工未激活时他没有用户行,但希望该员工仍在结果中,他应该这么说。叹息。
猜你喜欢
  • 2021-09-13
  • 2016-08-13
  • 1970-01-01
  • 2012-08-22
  • 2014-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多