【发布时间】:2021-09-17 10:29:59
【问题描述】:
pollId | user_id
53 | 8
53 | 3
53 | 2
61 | null
61 | null
62 | 1
如果我正在搜索 8 的 user_id,我的目标是完全排除 pollId 为 53 的所有行。
如果我使用 and r.user_id != 8,我仍然会得到一个 pollId 为 53 的不需要的行。同样,如果我使用 and r.user_id = 8。我只是得到 userId 8 的行。
我想要回来的是:
pollId | user_id
61 | null
62 | 1
完整的查询
select p.poll_id,
r.user_id,
from
poll p
inner join poll_question q
left join org_poll op
on p.poll_id = op.poll_id
left join poll_result r
on q.question_id = r.question_id
where p.poll_id in (53, 61, 62)
and (op.org_id = 7 or p.all_orgs = 1)
and p.poll_id = q.poll_id
and r.user_id != 8
group by q.question_id
【问题讨论】:
-
排除所有 pollId 为 53 的行 - 但假设你不是指
WHERE pollId <> 53,你的意思是“我想排除所有 pollId 任何行pollId 组中的用户 ID 为 8"? -
您的意图不是 100% 清楚 - 如果相同的查询只返回 user_id 8 if 值 3 和 2 没有共享相同的
pollId? -
给它上下文可能更容易。 UserId 表示用户是否参加了投票 (53)。我想从我的查询中删除用户 8 进行投票的所有行,在本例中为 53。但是我从其他参与投票的用户 2 和 3 那里获得了额外的行。
-
inner join poll_question q缺少 ON 子句。您的 MySQL 是否在 ONLY_FULL_GROUP_BY 关闭的情况下运行?