2012-02-08 55 views
1

好了,我投删除我的前面的问题,由于我的一部分愚蠢......MySQL查询需要带回行,而不是空结果

我有以下代码:

SELECT qnum, id, name, total_staff AS StaffCount, COUNT(q61g) AS TotalResp, 
(COUNT(q61g)/total_staff * 100) AS Perc 
FROM tdemog_pfp 
LEFT JOIN tresults_pfp ON tdemog_pfp.id = tresults_pfp.q61g 
WHERE qnum = 'q61g' AND q60p = '1' 
GROUP BY name 
ORDER BY name 

现在,这个查询的第一部分从tdemog表中取回行,例如它将带回5行数据,每行有从1到5的id。我需要做的查询然后将数据从tresultsWHERE q60p = 1为第一部分带回的5行中的每一行 - 就像普通的`LEFT JOIN'一样。

有意义吗?

H.

+0

你目前的代码给你什么结果?你想对这些结果有什么不同? – 2012-02-08 16:07:14

+0

@MichaelFredrickson - 想象一下,我有两个表,第一个表有5行,我希望查询从第二个返回** all **五行的结果,就像普通的'LEFT JOIN' ** **但是我需要要运行WHERE第二个表中的字段具有特定值。目前,如果有数据,上面的查询将只返回一行 - 我需要它从第一个表中返回所有5行 - 希望这有意义吗? – 2012-02-08 16:14:42

+0

您的查询中的GROUP BY可能导致您的预期结果出现问题吗? – 2012-02-08 16:24:08

回答

1

请尝试移动WHERE子句的一部分到你JOIN条件:

SELECT ... 
FROM tdemog_pfp 
LEFT JOIN tresults_pfp ON tdemog_pfp.id = tresults_pfp.q61g AND q60p = '1' 
WHERE qnum = 'q61g' 
GROUP BY name 
ORDER BY name 

如果您在WHERE条款必须从你的第二个表中的字段,它会限制整个记录。 ..但是,如果将其放入JOIN的条件中,即使第二个表中的记录不符合附加条件,第一个表中的记录仍应返回...

我不确定哪个列属于哪个表...但是将第二个表中的所有列移动到您的JOIN

+0

谢谢!真的,非常感谢。 – 2012-02-08 16:25:11