MySQL中的查询没有结果

时间:2017-02-12 08:59:49

标签: mysql sql

请帮忙! 我有3张桌子:

 employee, 
 assign, 
 vehicle. 

只有2名员工可以占用1辆车。我需要选择所有不包含任何车辆的员工。

查询:

select EID,
    Employee_name
from employee
where EID not in (
        select user1
        from assign
        )
    and EID not in (
        select user2
        from assign
        )

如果“user1”或“user2”中的所有单元格都已填充,则此查询有效。 如果assign表的“user1”或“user2”为空值

分配表值

enter image description here

查询输出为空

查询结果

enter image description here

如果用值填入,它将返回所有EID和employee_name(s) 不在分配表中的User1和User2中。如果所有user1和user2都已填满,则AKA正常工作。如何以不显示assign.user1或assign.user2为空的方式显示所有可用员工的方式重新创建此查询。

3 个答案:

答案 0 :(得分:1)

您可以使用not exists

select eid,
    employee_name
from employee e
where not exists (
        select 1
        from assign a
        where e.eid in (a.user1, a.user2)
        );

答案 1 :(得分:0)

您也可以使用NOT NULL

SELECT eid, employee_name
FROM employee
WHERE eid not in (
  SELECT user1
  FROM assign
  WHERE user1 IS NOT NULL
  UNION
  SELECT user2
  FROM assign
  WHERE user2 IS NOT NULL
)

答案 2 :(得分:0)

两个答案都很好。如果您想了解更多有关查询无效的原因,请参阅以下简短说明。

问题来自SQL如何处理NULL值。 SQL不是基于二值逻辑,而是基于三值逻辑:即TRUEFALSEUNKNOWN。 在您的查询中,只要EIDNULLuser1列中的user2值进行比较,结果就不会是TRUE也不会FALSE },但是UNKNOWN

另外一种方法是使用函数COALESCE()IFNULL()

w3schools on coalesce(), ifnull() and others

有关所有这些内容的更多信息,您可以查看oracle文档以及其他来源:

oracle documentation on nulls

希望它有所帮助!