我有以下三個表:SQLLite在以利用內部條款加入
CREATE TABLE users (
id INTEGER NOT NULL,
name TEXT NOT NULL,
PRIMARY KEY (id));
CREATE TABLE books (
id INTEGER NOT NULL,
name TEXT NOT NULL,
PRIMARY KEY (id));
CREATE TABLE reviews (
id INTEGER NOT NULL,
user_id INTEGER,
book_id INTEGER,
score INTEGER NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY(user_id) REFERENCES users (id),
FOREIGN KEY(book_id) REFERENCES books (id));
我想產生的所有書籍的列表,如果一個用戶登錄,也表明了這本書的用戶評價得分。
案例#1(作品): 如果沒有用戶登錄(USER.ID未設置),只是列出所有的書:
sqlite> SELECT * FROM books;
id|name
1|Life of Pi
2|The Hobbit
3|Catch 22
案例#2(作品): 如果用戶2登錄在(user.id = 2),列出所有的書和他的評論以及(如果有的話):
sqlite> SELECT * FROM books LEFT OUTER JOIN reviews on books.id =
reviews.book_id WHERE reviews.user_id = 2 OR reviews.user_id IS NULL;
id|name|id|user_id|book_id|score
1|Life of Pi|2|2|1|5
2|The Hobbit|3|2|2|2
3|Catch 22||||
案例#3(失敗): 如果用戶1登錄(user.id = 1),列出所有書以及他的評論(如果有的話):
sqlite> SELECT * FROM books LEFT OUTER JOIN reviews on books.id =
reviews.book_id WHERE reviews.user_id = 1 OR reviews.user_id IS NULL;
id|name|id|user_id|book_id|score
1|Life of Pi|1|1|1|3
3|Catch 22||||
這裏的問題是,書2有一個評論,但不是來自用戶1,所以書不符合WHERE子句。
希望有關如何解決這個問題的任何建議。通過更改模式或我的查詢。我正在使用SQLAlchemy,因此使用ORM也是可能的。