按子查询列值排序

时间:2019-08-30 05:39:05

标签: sql subquery

我想根据子查询表订购SQL查询。

  • 表格书籍(ID,名称,作者,日期)
  • TABLE用户(ID,名称,已创建)
  • 表格books_likes(用户ID,book_id,日期)

我的查询,用于选择每本喜欢的书。我希望它按books_likes.date排序,而不使用联接,但更易于索引子查询

第一次尝试:

SELECT id 
FROM books 
WHERE id IN (SELECT book_id 
             FROM books_likes 
             WHERE user_id = 1) 
ORDER BY books_likes.date

第二次尝试:

SELECT id 
FROM books 
WHERE id IN (SELECT book_id 
             FROM books_likes 
             WHERE user_id = 1 
             ORDER BY date)

这些都不起作用。找不到该列(第一次尝试),或者我的语法错误(第二次尝试)。

2 个答案:

答案 0 :(得分:0)

WHERE IN + subquery方法的问题在于,它只能限制books表中的记录,而不能利用books_likes表中的列。 / p>

我会使用连接短语查询您的查询

SELECT
    b.id
FROM books b
INNER JOIN books_likes bl
    ON b.id = bl.book_id
WHERE
    bl.user_id = 1
ORDER BY
    bl.date;

如果MySQL选择使用以下索引,则可能有助于上述查询:

CREATE INDEX idx ON books_likes (user_id, book_id, date);

答案 1 :(得分:0)

我认为您根本不需要join。您应该尝试:

SELECT bl.book_id
FROM books_likes bl
WHERE bl.user_id = 1
ORDER BY bl.date;

此查询应在books_likes(user_id, date, book_id)上使用索引。

相关问题