MySQL:如何选择与LEFT JOIN不匹配的所有结果

时间:2011-09-21 01:04:41

标签: mysql sql join left-join

我的SELECT语句基本上是:

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

但是,我试图只选择尚未回答的调查。 “响应”表包含4个相关列(用户ID [用户回复调查],答案,问题[与调查ID相同,如果单个问题,如果是多个,对应于问题ID]和调查ID)

我正在尝试编写一个SQL语句,选择所有没有任意用户ID响应的调查($ _SESSION ['userId'])...尝试使用各种LEFT JOIN进行此操作作为嵌套的SELECT命令,但一直无法解决。

有人能说明如何解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

或者,只需离开连接并检查右侧的列为null:

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。

答案 1 :(得分: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>

这将返回用户未回复的所有调查。

我希望这个想法很明确。