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 に答える