我的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命令,但一直无法解决。
有人能说明如何解决这个问题吗?
答案 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>
这将返回用户未回复的所有调查。
我希望这个想法很明确。