2016-05-16 9 views
-1

私はfeedsテーブルを持っていて、それを好きな人のjson配列カラム(UserLike)です。私はフィードのリストを取得したいと正確に彼が言っていた場合(UserIDを比較し、またはUserLikeヌルを返さないことにより、ユーザのログインの情報のように、私もログインもしフィードの行を取得したいjson_value内のSQL Server 2016フィルタ

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"}] 

:のようなテーブルになりますユーザーは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句:ユーザーID = 2

答えて

0
--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 
+0

こんにちは@ gofr1:まず、あなたの答えをありがとうございました。 第二に、私は明らかにテーブル構造を書いていないよ、ごめんなさい。これは次のようなものでなければなりません
'FeedID FeedName UserLike 1 Feed 1 [{" UserID ":1、" UserName ":" User 1 "}、{" UserID ":2、" UserName ":" User 2 " ...] 2フィード2 [{"ユーザーID":1、 "ユーザー名": "ユーザー1"}、{"ユーザーID":2、 "ユーザー名": "ユーザー2"}、...] 3フィード3 [{"" UserID ":1、" UserName ":" User 1 "}]'
user3238543

+0

コメントを読むのが難しい質問を編集してください。 – gofr1

+0

こんにちは@ gofr1:まず、あなたの答えをどうもありがとう。 第二に、私は明らかにテーブル構造を書いていないよ、ごめんなさい。それは私のポストで修正されました。 私は 'CROSS APPLY OPENJSON(UserLike)'を使ってみました。しかし、それは、 'UserLike 'のログインユーザの' UserID'のないレコードは表示されません。そして、返されたリストは、私が望むものではない。私はフィードのリストを取得したい、と私はそれが好きかどうかの情報。クロスアプリケーションを適用した後にWHERE文を追加するopenjsonはいくつかのレコードを見逃してしまいます。何かアドバイスがありますか、間違っていますか?どうもありがとうございました !! 申し訳ありませんが、私の最初の投稿はスタックにあります:)。 – user3238543

関連する問題