У меня есть следующие три таблицы: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 было бы возможно.