#sql #sqlalchemy
#sql #sqlalchemy
Вопрос:
Кажется, я достиг ментального застоя в этом вопросе и надеюсь, что кто-нибудь сможет дать мне толчок в правильном направлении.
У меня есть веб-приложение, похожее на клиент программы чтения новостей. Он написан на Python и использует SQLAlchemy, но здесь это не важно, поскольку я пытаюсь разобраться в SQL, также я использую SQLite в качестве серверной части.
Существует таблица Users и таблица Articles, таблица Users достаточно очевидна, а в таблице Articles хранятся отдельные статьи (например, сообщения на сервере новостей). Я отслеживаю, какой пользователь прочитал какую статью через множество взаимосвязей, используя для этого другую таблицу Users_Articles.
(Сокращенная) схема выглядит примерно так:
Users:
user_id
user_name
Articles:
article_id
article_body
Users_Articles:
user_id
article_id
Что я пытаюсь сделать, это ВЫБРАТЬ список статей, но также отобразить, какая статья уже была прочитана текущим пользователем. Таким образом, я хотел бы добавить логический столбец к набору столбцов в инструкции SELECT, который указывает, есть ли строка в Users_Articles, которая ссылается на статью для текущего пользователя.
Ответ №1:
вы можете использовать левое внешнее соединение
select
a.article_id, a.article_body,
ua.article_id as as been_read --will be not null for read articles
from Articles a
left outer join Users_Articles ua
on (ua.article_id = a.article_id and ua.user_id = $current_user_id)
или с помощью дополнительного выбора
select
a.article_id, a.article_body,
(select 1 from Users_Articles ua
where ua.article_id = a.article_id
and ua.user_id = $current_user_id) as been_read --will be not null for read articles
from Articles a
Комментарии:
1. Спасибо за ваши ответы, довольно простые, но по какой-то причине я не мог разобраться в этом.