Where子句查询

时间:2017-04-27 00:04:29

标签: mysql sql

所以我询问输出应该显示所有受过医学训练的员工和所有急救的志愿者:

SELECT Concat (s.staff_fname, ' ', s.staff_lname)        AS Staff_Name, 
   s.medically_trained, 
   s.staff_email_address, 
   Concat(v.volunteer_fname, ' ', v.volunteer_lname) AS Volunteer_Name, 
   v.first_aid, 
   v.volunteer_email_address 
FROM   volunteer v 
   JOIN staff s 
     ON v.volunteerid = s.staffid 
WHERE  s.medically_trained = ' yes' 
   AND v.first_aid = ' yes'

然而,当我执行我的代码时,它会显示空集。我做错了什么?

我是初学者编码器,所以请不要判断我是否犯了一个明显的错误lol

谢谢!

4 个答案:

答案 0 :(得分:0)

删除where部分中的空格:

SELECT Concat (s.staff_fname, ' ', s.staff_lname)        AS Staff_Name, 
   s.medically_trained, 
   s.staff_email_address, 
   Concat(v.volunteer_fname, ' ', v.volunteer_lname) AS Volunteer_Name, 
   v.first_aid, 
   v.volunteer_email_address 
FROM   volunteer v 
   JOIN staff s 
     ON v.volunteerid = s.staffid 
WHERE  s.medically_trained = 'yes'  /* <-- */ 
   AND v.first_aid = 'yes'    /* <-- */

答案 1 :(得分:0)

如果您执行CONCAT('foo', 'null'),则结果为null。检查是否不是这种情况。

此外,它可以来自JOIN子句或WHERE子句。尝试不使用JOIN运行查询,然后不使用WHERE子句运行查询,看看您是否还有空集。

答案 2 :(得分:0)

首先从“是”中删除空格,它也可能导致此问题。您可能会在结果中获得非空值。

如果它仍然是空白,则尝试在两个表上单独运行where子句,

选择* 来自志愿者v,其中v.first_aid ='是';

和    从员工中选择*    WHERE.medically_trained ='是';

并检查其中任何一个是否为您提供null,如果是,那么您的答案是正确的。

答案 3 :(得分:0)

试试这个:

SELECT CONCAT(s.staff_fname,' ', s.staff_lname)AS Name,s.medically_trained AS Trained,s.staff_email_address AS Email_Address,'STAFF' cType
FROM staff s
WHERE s.medically_trained = ' yes' 

UNION ALL

SELECT Concat(v.volunteer_fname, ' ', v.volunteer_lname) AS Name,v.first_aid AS Trained,v.volunteer_email_address AS Email_Address,'VOLUNTEER' cType
FROM volunteer v 
WHERE v.first_aid = ' yes'

我在两个表中使用了UNION ALL,因为我不认为Volunteer_ID将等同于STAFF_ID。我包含cType列,以便您识别记录是来自Staff表还是Volunteer