SQL ВЫБИРАЕТ сложное выражение в столбце — дополнительное логическое значение

#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. Спасибо за ваши ответы, довольно простые, но по какой-то причине я не мог разобраться в этом.