Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当其中一个WHERE条件导致false时,MySQL查询给出null值_Mysql - Fatal编程技术网

当其中一个WHERE条件导致false时,MySQL查询给出null值

当其中一个WHERE条件导致false时,MySQL查询给出null值,mysql,Mysql,我在使用MySQL查询时遇到问题。 我有两个表,即用户和项目。我正在尝试获取项目名称和在特定项目中工作的用户数。下面是我正在使用的查询 SELECT b.projName AS project_name, COUNT(a.empId) AS project_strength FROM users a, projects b WHERE b.projName LIKE '%windows%' AND (a.empProjId = b.projId) 在

我在使用MySQL查询时遇到问题。 我有两个表,即用户和项目。我正在尝试获取项目名称和在特定项目中工作的用户数。下面是我正在使用的查询

SELECT b.projName AS project_name, 
       COUNT(a.empId) AS project_strength 
FROM users a, 
     projects b 
WHERE b.projName LIKE '%windows%' AND 
     (a.empProjId = b.projId)
在这种情况下,当没有用户为项目工作时(users表中没有empProjId与projId of projects表匹配的行),即使项目存在于projects表中,并且like子句匹配,我也会将项目名称设置为null。在这种情况下,我希望显示项目名称,并且计数为0

我是个初学者,不知道这是否可能。任何帮助都将不胜感激。
非常感谢。

对于这些事情,您需要使用
左联接
,这将强制DB从查询的“左”端返回所有相关记录(从
表返回
),无论查询的“右”端(从
联接
表)是否有任何匹配的记录:

“lazy join”版本的等效语法为

WHERE b.projName LIKE '%windows%' AND
   ((a.empProjId = b.projId) OR (b.projID IS NULL))
您只需执行以下操作:

SELECT b.projName AS project_name, 
       COUNT(a.empId) AS project_strength 
FROM projects b 
LEFT JOIN users a ON  a.empProjId = b.projId
WHERE b.projName LIKE '%windows%'
GROUP BY b.projName

LEFT JOIN将确保您始终获得项目名称,即使用户中没有匹配项。

您应该使用LEFT JOIN和带有group by的计数

SELECT b.projName AS project_name, 
       count(b.projName) AS project_strength 
  FROM projects b LEFT JOIN 
       users a ON (b.projId = a.empProjId)
 WHERE b.projName LIKE '%windows%' 
 group by b.projName

我已经发现您的数据库可能存在设计问题。员工是否可以链接到多个项目?我想是的(不一定是在运行项目,但也可能是老项目)。在这种情况下,您应该有一个第三个表,其中包含两个字段:projectId和userId,以便将多个项目链接到给定的用户,将多个用户链接到给定的项目(=多对多关系)。对于其余的,答案可能会帮助你…@Bartdude非常感谢你的回答。是的,一些用户可能在多个项目中工作。我会记住这一点,并进行必要的更改。非常感谢您的回复。在我交换了连接顺序后,上面的方法起了作用。我的意思是
项目b左加入用户a
SELECT b.projName AS project_name, 
       count(b.projName) AS project_strength 
  FROM projects b LEFT JOIN 
       users a ON (b.projId = a.empProjId)
 WHERE b.projName LIKE '%windows%' 
 group by b.projName