2011-09-21 108 views
1

我的SELECT语句基本上是:MySQL的:如何选择所有结果不匹配LEFT JOIN

SELECT *, user.user, response.survey FROM survey, user, response ORDER BY survey.added 

不过,我想只选择没有得到回答的调查。 '回答'表格包含4个相关栏目(用户ID [用户回复调查],回答,问题[如果单个问题与调查ID相同,如果多个,对应问题ID],调查ID)

I试图编写一个SQL语句,选择所有没有任意用户ID($ _SESSION ['userId'])的调查的调查...尝试使用各种LEFT JOIN以及嵌套的SELECT命令,但一直未能弄清楚。

任何人都可以阐明如何去做这件事?

+0

请发表信息和示例数据,请 –

回答

0

这个SELECT语句,你写道:

SELECT *, user.user, response.survey FROM survey, user, response ORDER BY survey.added 

正在做一个交叉连接(获取用户,响应和调查所有可能的组合),它显然不是数据表之间引用的方式;因此是错误的。您需要通过一个公用密钥来加入这3个表。

但要回答你的问题......

如果有与特定用户响应表;然后做这样的事情:

select * from survey s where s.survey_id not in (
select survey_id from response where userId=<particular_user_id>) 
and s.user_id=<particular_user_id> 

而且这将返回所有用户没有回应的调查。

我希望这个想法很清楚。

1

或者,只是左连接,检查右边的列空:

SELECT *, user.user, response.survey FROM user 
LEFT JOIN response ON response.user=user.user 
LEFT JOIN survey ON survey.surveyID=response.surveyID 
WHERE user.user=[userID from session] AND response.user IS NULL ORDER BY survey.added 

因为如果从响应表的匹配列缺,response.user将是NULL。