我有两张table- IdentificationChallenges
以及 IdentificationResults
.
挑战表显示挑战列表,结果表存储用户尝试挑战的情况。
我需要一个查询来返回用户没有尝试过的所有挑战(其中用户id在结果表中不存在)。我的尝试如下:
SELECT ic.*
from IdentificationChallenges ic
LEFT JOIN IdentificationResults ir ON ic.Id = ir.ChallengeId
WHERE ir.UserId != 'cfc1d26c-c091-4b17-aaa3-31e8f5232cf9'
ORDER BY NEWID()
它不检索任何记录。知道我哪里出错了吗?
识别挑战
Id | ChallengeDateTime | ImageUrl | Description
鉴定结果
Id | ChallengeId | UserId | ChallengeResult | ResultDateTime
3条答案
按热度按时间368yc8dk1#
我会用
not exists
获取特定用户尚未完成的挑战列表。原因是,在你的加入中,你实际上在寻找ir.UserId is null
但这不会返回与特定用户相关的列表。以下是你需要的。xoshrz7s2#
更新您的
WHERE
条件为WHERE ir.UserId IS NULL
. 它将返回用户没有尝试过的所有挑战。同时更新ON
使用ic.Id = ir.ChallengeId AND ir.UserId = 'cfc1d26c-c091-4b17-aaa3-31e8f5232cf9'
得到challanges
尝试者user
.8nuwlpux3#
您必须加入该用户的结果,并使用
WHERE
检查是否未找到匹配项。ps:你为什么这么想
order by newid()
当你不在结果中返回新创建的id时?