SQL SELECT сложное выражение в столбце - дополнительный логический - PullRequest
0 голосов
/ 07 июня 2011

Я, кажется, достиг психического барьера в этом и надеюсь, что кто-то может дать мне удар в правильном направлении.

У меня есть веб-приложение, похожее на клиент для чтения новостей. Он написан на Python и использует SQLAlchemy, но здесь это не важно, поскольку я пытаюсь разобраться с SQL, а также использую SQLite в качестве бэкэнда.

Существует таблица «Пользователи» и таблица «Статьи», таблица «Пользователи» достаточно очевидна, а в таблице «Статьи» хранятся отдельные статьи (например, сообщения на сервере новостей). Я отслеживаю, какой пользователь прочитал какую статью, используя для этого связь «многие-многие», для чего используется другая таблица Users_Articles.

(урезанная) схема выглядит примерно так:

Users:
  user_id
  user_name

Articles:
  article_id
  article_body

Users_Articles:
  user_id
  article_id

То, что я пытаюсь сделать, это SELECT список статей, но также отображать, какая статья уже была прочитана текущим пользователем, поэтому я хотел бы добавить логический столбец к набору столбцов в операторе SELECT указывает, есть ли в Users_Articles строка, которая ссылается на статью для текущего пользователя.

1 Ответ

1 голос
/ 07 июня 2011

Вы можете перейти с левым внешним соединением

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...