列中的SQL SELECT复杂表达式 - 附加布尔值

时间:2011-06-07 15:49:24

标签: sql sqlalchemy

我似乎已经达成了一个心理障碍,并希望有人可以给我一个正确的方向。

我有一个类似于新闻阅读器客户端的Web应用程序。它是用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 个答案:

答案 0 :(得分: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)

或使用subselect

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