2017-04-27 238 views
1

所以我有查询的输出应该显示所有受过医学培训的工作人员,并有急救所有的志愿者: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' 

但是当我执行我的代码,它说,空集。我究竟做错了什么?

我是初学者所以编码器请不要判断,如果香港专业教育学院取得了明显的错误笑

THANK YOU!

+0

在您的问题中发布样本数据和表结构。但有一点,你的地方的条件在'是'之前有空格 - >''是''这是故意的吗? – WillardSolutions

+0

您的查询在WHERE子句中有'yes'。该列*是否真的包含值'space,lowercase-y,lowercase-e,lowercase-s'来表示真值? –

回答

0

首先从'yes'中删除空格,它也可能会导致此问题。您可能会得到not null值的结果。

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

SELECT * FROM 志愿者v,其中v.first_aid =“是”;

and select * from staff s WHERE s.medically_trained ='yes';

并检查是否有任何一个给你为null,如果是,那么你的答案是正确的。

+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' /* <-- */ 
0

如果你做一个CONCAT('foo', 'null'),其结果将是null。检查是否不是这种情况。

此外,它可能来自JOIN子句或WHERE子句。尝试运行没有JOIN,然后没有WHERE子句的查询,看看你是否仍然有空集。

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列以便确定记录是否来自职员表或志愿者