2

データベースに2つのテーブルがあります。

Article
--------------------------------------------
articleID INTEGER PRIMARY KEY AUTOINCREMENT
userID    VARCHAR

Rating
--------------------------------------------
articleID INTEGER
userID    VARCHAR
rating    INTEGER

サンプルデータ:

Article
articleID        userID
---------------------------------
1                12345
2                23456
3                23456
4                99999
5                15678

Rating
articleID        userID        rating
--------------------------------------------
1                12345         7.5
2                12345         8.5
2                31359         7.5
1                24021         0.0
1                25012         7.5

すべての記事を入手して、評価したかどうかを示したいと思います。試してみましたが、次のステートメントで評価された記事のリストしか取得できません。

SELECT a.*, rating AS myRating FROM Article AS a 
LEFT JOIN Rating AS b
ON a.articleID = b.articleID
WHERE (b.userID is NULL || b.userID = "12345") 

テーブルを結合して結果を得るにはどうすればよいですか?

Expected output (with userID 12345)
articleID        userID        myRating
--------------------------------------------
1                12345         7.5
2                23456         8.5
3                23456         NULL
4                99999         NULL
5                15678         NULL
4

2 に答える 2

4

WHERE句は、userIDが12345またはNULLではない列を除外します。

SELECT a.*, rating AS myRating 
FROM Article AS a 
LEFT JOIN Rating AS b
ON a.articleID = b.articleID 
AND b.userID = "12345"

aのすべての行を表示したいので、ON句にuser-id制限を入れます。これで、Aからすべての行が取得され、ユーザーIDが12345でない場合の評価はNULLになります。

于 2012-07-05T06:45:13.530 に答える
1

つまり、

SELECT a.*, b.rating AS myRating 
FROM Article AS a 
LEFT JOIN Rating AS b ON(a.articleID = b.articleID AND b.userID = "12345")
于 2012-07-05T06:46:25.457 に答える