我有一个包含四个表的数据库:
users
- id
- name
sessions
- id
- title
sessions_users
- id
- sessions_id
- users_id
session_feedback
- id
- sessions_id
- users_id
用户被设置为参加某些会话(通过将他们的ID添加到sessions_users
表)。用户还应该在会话上留下反馈。完成后,会话的ID(sessions_id
)和退出反馈的用户的ID(users_id
)将输入session_feedback
表。
鉴于特定用户的ID,我无法弄清楚如何选择不尚未收到反馈的会话(即session_feedback
中没有包含sessions_id
的条目1}}和users_id
)。即我需要选择所有有待反馈的会话。
任何人都可以提供帮助吗?
答案 0 :(得分:2)
这是你想要的吗?这将返回尚未收到反馈的所有会话ID和标题。
select sessions.id, sessions.title
from sessions where sessions.id NOT IN
(select sessions_id from session_feedback)
对于特定用户:
SELECT sessions.id, sessions.title
FROM sessions INNER JOIN sessions_user on
sessions.id = sessions_user.sessions_id
WHERE sessions.id NOT IN (select sessions_id from session_feedback)
AND sessions_user.users_id = [given user id]
答案 1 :(得分:1)
你可以通过LEFT join来实现。
SELECT s.* FROM sessions s
LEFT JOIN session_feedback sf ON sf.sessions_id = s.id
WHERE sf.session_id IS NULL
查询只检索来自sessions
表的所有记录,其中没有指向feedback
表的链接(从而为您提供没有反馈的会话)。如果您想要包含那些没有反馈的用户的会话。
SELECT s.* FROM sessions s
INNER JOIN sessions_users su ON su.sessions_id = su.id
INNER JOIN users u ON su.user_id = u.id
LEFT JOIN session_feedback sf ON sf.users_id = u.id
WHERE sf.session_id IS NULL
要进一步改进或收紧查询,只需添加WHERE
子句。