4

3 つのテーブルがある場合:

posts
------
postid  date_posted title   content


views
------
viewid  post_id user_id


users
------
userid  username
  1. postsが閲覧していないものをすべてリストする正しい方法はuser_id? このクエリは正しいですか?
    SELECT * FROM posts LEFT JOIN views ON postid=post_id WHERE user_id=123 AND postid=NULL;

  2. すべてpostsとその「閲覧状況」を で一覧表示してみてはuser_idいかがでしょうか。

  3. LEFT JOIN、CROSS JOIN、および (通常の結合? 投稿、ビューから * を選択) についての理解を深めるために、優れた (ユーザーフレンドリーでオタクではない) リソースをお勧めできますか?

ありがとうございました!

4

5 に答える 5

3

1.

SELECT *
FROM posts
WHERE postid NOT IN (
    SELECT post_id 
    FROM views
    WHERE user_id = 123
)

また

SELECT *
FROM posts
LEFT JOIN views ON views.post_id = posts.postid AND views.user_id = 123
WHERE viewid IS NOT NULL
于 2012-09-26T09:31:57.513 に答える
1
1.select * from posts where post_id in(select post_id from views where user_id<>123)
or
select * from posts p join views v
on p.post_id=v.post_id
and v.user_id<>123

2.select p.*,CASE when isnull(v.viewid,0)=0 then 0 else 1 end as viewstatus
from posts p left join views v
on p.post_id=v.post_id
于 2012-09-26T09:34:44.807 に答える
1

3 番目の質問への回答として、codinghorror.com の visual-explanation-of-sql-joinsのリンクを確認してください。これは、結合の理解を深めるのに役立ちます。

于 2012-09-26T09:38:37.117 に答える
0

1, users テーブルも含める必要があります. しかし、それはおおむね正しいクエリです はい

2,SELECT * FROM posts LEFT JOIN views ON postid=post_id は、すべての投稿を表示することを示す必要があります

3、http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html

于 2012-09-26T09:34:13.897 に答える
0

1)「scoota269」の回答を参照

2)独自のSQLを参照してください。ただし、削除してくださいAND postid=NULL

3) http://www.w3schools.com/sql/sql_join.asp

于 2012-09-26T09:34:25.113 に答える