【问题标题】:SQLite book shop: Last students and all books they orderedSQLite 书店:最后的学生和他们订购的所有书籍
【发布时间】:2021-03-21 23:24:44
【问题描述】:

论坛。我正在尝试为我当地的书店运行 SQL。问题是显示最后 N 个学生以及他们订购的所有书籍。

我的尝试:

CREATE TABLE books (
   id INTEGER,
   name TEXT,
   genre TEXT,
   pages INTEGER,
   price INTEGER
);
INSERT INTO books (id, name, genre, pages, price)
VALUES
(1, name_1, genre_1, 100, 10),
(2, name_2, genre_2, 200, 20),
(3, name_3, genre_3, 300, 30); 
--etc rows here

CREATE TABLE orders (
   id INTEGER,
   name TEXT,
   id_book INTEGER,
   date INTEGER --in SQLite INTEGER for a date is okay
);
INSERT INTO orders (id, name, id_book, date)
VALUES
(1, name_1, id_book_1, date_1),
(2, name_2, id_book_2, date_2),
(3, name_3, id_book_3, date_3); 
--etc rows here

WITH last_students AS(
SELECT orders.name
FROM orders
ORDER BY orders.id DESC
LIMIT 3) --creates temp table with last 3 names of students
SELECT orders.name, books.name
FROM books
INNER JOIN last_students
    ON books.id = last_students.id_book;

代码可以吗?语法检查仅在第 8 行显示错误,我没有得到。提前谢谢你

【问题讨论】:

    标签: sql sqlite join common-table-expression


    【解决方案1】:

    您可以将books 加入orders 并过滤最后N 个学生的结果:

    WITH last_students AS (
      SELECT DISTINCT name
      FROM orders
      ORDER BY date DESC LIMIT 3
    ) 
    SELECT o.name AS student_name, 
           b.name AS book_title
    FROM books b INNER JOIN orders o
    ON o.id_book = b.id
    WHERE o.name IN last_students
    

    CTE 返回最近订购一本书的 3 名学生(按日期而非 ID)。

    请参阅demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-29
      • 2016-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-19
      • 2011-03-05
      • 1970-01-01
      相关资源
      最近更新 更多