0

我有一个表,其中包含喜欢它的人feeds的 json 数组列 ( )。UserLike表将如下所示:

FeedID  FeedName    UserLike
 1       Feed 1      [{"UserID":1,"UserName":"User 1"},{"UserID":2,"UserName":"User 2"},...]
 2       Feed 2      [{"UserID":1,"UserName":"User 1"},{"UserID":2,"UserName":"User 2"},...]
 3       Feed 3      [{"UserID":1,"UserName":"User 1"}]

我想通过比较获取提要列表和用户登录信息UserID(如果他喜欢,或者不返回 UserLike null,即使登录用户不在UserLike列表中,我也想获取提要行)。

我该怎么做?T-SQL 是否支持以下内容:

select 
    FeedID, FeedName, 
    Json_value(UserLike, '$[UserID=1].UserName')...

我期待的结果是:

FeedID  FeedName    UserID  UserName
1       Feed 1      2       User 2
2       Feed 2      2       User 2
3       Feed 3      NULL    NULL

带有 WHERE 子句:UserID=2

4

1 回答 1

1
--Here we take all feeds
;WITH cte AS (
SELECT DISTINCT FeedID,
                FeedName
FROM dbo.feeds
--Here we take parsed JSON
), feeds AS (
SELECT  FeedID,
        FeedName,
        UserID,
        UserName
FROM [dbo].[feeds] f
CROSS APPLY OPENJSON ([UserLike]) 
WITH (
    UserID int,
    UserName nvarchar(255)
))
--And here we join them
SELECT c.FeedID,
        c.FeedName,
        f.UserID,
        f.UserName
FROM cte c
LEFT JOIN feeds f
    ON f.FeedID = c.FeedID and f.UserID = 2

输出:

FeedID  FeedName    UserID  UserName
1       Feed 1      2       User 2
2       Feed 2      2       User 2
3       Feed 3      NULL    NULL
于 2016-05-16T09:48:05.690 回答