我想根据子查询表订购SQL查询。
我的查询,用于选择每本喜欢的书。我希望它按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)
这些都不起作用。找不到该列(第一次尝试),或者我的语法错误(第二次尝试)。
答案 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)
上使用索引。