2011-09-21 150 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。