我对SQL Server 2008有一个非常简单的请求,但我无法成功实现我想要的。
说明
我有以下架构:
对于给定FAVORITE
的 ,用户可以有零个或多个COMMENTs
,但是,如果用户有多个评论,则所有评论COMMENTs
都有一个DeletedDate
NOT NULL
(可能最后一个除外)。
DeletedDate
充当标志“IsDeleted”,应用程序确保每个用户每个收藏夹只有零或一个评论是NULL
. 如果DeletedDate
是NULL
,则该记录被视为已删除。
但是用户可以FAVORITE
没有COMMENT
. COMMENT
是完全可选的。
我想要什么
我正在尝试创建一个请求,对于给定的用户,该请求将返回其所有有效的收藏夹(其中FAVORITE.DeleteDate
is NOT NULL
)和COMMENT
关联的有效FAVORITED
(如果存在)。
这是我的要求:
SELECT *
FROM FAVORITE f
LEFT JOIN COMMENT co ON f.IdReferenced = co.IdReferenced
WHERE f.IdUser = 7
AND f.DeletedDate IS NULL
AND co.IdUser = 7
(请使用IdUser = 7进行测试)
但是,此请求返回所有COMMENTs
用户FAVORITEs
7,甚至DeletedDate
是 NOT NULL 的注释。
我试图AND co.DeletedDate IS NOT NULL
在上面的请求中添加一个,但是现在,它没有返回没有任何 COMMENT
FIDDLE的 FAVORITEs
为了重现这个问题,我创建了这个SQLFIDDLE
尝试的结果
如果我的解释不清楚,请求必须返回我的 SQLFIDDLE 的四行,其中 CommentText 字段是“必须出现 1”、“必须出现 2”、“必须出现 3”、“必须出现 4”
请求必须返回上述行,减去红叉线
重要 我刚刚在我的 SQLFIDDLE 中出错了,COMMENT 的第四行应该是
INSERT [dbo].[COMMENT] ([IdComment], [IdUser], [IdReferenced], [CommentText], [CreationDate], [ModificationDate], [DeletedDate]) VALUES (8, 7, 2869, N'Must appear 3', CAST(0x0000A33500EC1133 AS DateTime), NULL, NULL)
你能改进我的要求吗?我必须用 LINQ 编写它,但我应该能够从 SQL 转换为 LINQ。
感谢您的时间 !