【问题标题】:MySQL Query: select all the books a user has completed reviewingMySQL Query:选择用户已完成复习的所有书籍
【发布时间】:2010-10-28 10:35:46
【问题描述】:

我有以下 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)

【问题讨论】:

    标签: mysql select join


    【解决方案1】:
    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
            )
    

    【讨论】:

    • 感谢 Quassnoi,但如果存在没有建议同义词的源短语,但用户已对书的另一个源短语的同义词进行评级,则上述查询会返回一本书。
    • @Bill:查看帖子更新,没有先正确完成您的任务。
    • @Quassnoi:如果没有添加 source_phrases,则会选择书籍
    • @Quassnoi:根本不应该选择没有 source_phrases 的书籍。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    • 2016-04-12
    • 1970-01-01
    相关资源
    最近更新 更多