MySQL 查询 : select all the books a user has completed reviewing

标签 mysql select join

我有以下 5 个表:

users(user_id)
books(book_id, author_id)
source_phrases(source_phrase_id, book_id, phrase)
synonym_phrases(synonym_phrase_id, source_phrase_id, reader_id, synonym)
synonym_ratings(synonym_ratings_id, synonym_phrase_id, rater_id, rating)

我正在尝试获取一个查询,该查询将选择用户已完成审阅的所有图书。

如果用户对每个源短语执行了以下操作,他们就完成了对一本书的评论:

用户为源短语建议了一个同义词(synonym_phrases 表中的 reader_id 是用户 id)

用户对源短语的同义词进行了评分(synonym_ratings表中的rater_id为用户id)

最佳答案

SELECT  b.*
FROM    books b
WHERE   book_id NOT IN
        (
        SELECT  sp.book_id
        FROM    source_phrases sp
        WHERE   source_phrase_id NOT IN
                (
                SELECT  syp.source_phrase_id
                FROM    synonym_phrases syp
                WHERE   reader_id = @user_id
                )
                AND source_phrase_id NOT IN
                (
                SELECT  syp.source_phrase_id
                FROM    synonym_phrases syp
                JOIN    synonym_ratings sr
                ON      sr.synonym_phrase_id = syp.synonym_phrase_id
                        AND sr.rater_id = @user_id
                )
        )
        AND book_id IN
        (
        SELECT  sp.book_id
        FROM    source_phrases sp
        )

关于MySQL 查询 : select all the books a user has completed reviewing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4042004/

相关文章:

mysql - 使用 DESC 的 SQL 查询无法正常工作

join - Hadoop:是否可以将多个Map-Side连接在一起,似乎不是吗?

android - 在 SQLite 数据库中加入 3 个表

mysql - Symfony 1.4 setter 类型 double

MySQL Join 三个表返回多个结果

mysql - 选择语句 where Users.ID=Forum.ID

Mysql select查询数据连接

java - 仅当值不存在时如何将其插入到mysql中?

c# - asp.net 到 MySql 的问题。尝试从输入返回信息

sql - 在单个 SQL 查询中获取两个下一个和两个前一个条目