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

SQL选择列中的复杂表达式-附加布尔值,sql,sqlalchemy,Sql,Sqlalchemy,我似乎已经在这方面遇到了心理障碍,希望有人能朝着正确的方向踢我一脚 我有一个类似于新闻阅读器客户端的web应用程序。它是用Python编写的,并使用SQLAlchemy,但这在这里并不重要,因为我试图了解SQL,而且我使用SQLite作为后端 有一个Users表和Articles表,Users表非常明显,Articles表存储单个文章(如新闻服务器上的文章)。我使用另一个表Users\u Articles通过多个关系跟踪哪个用户读过哪篇文章 (缩减)模式如下所示: Users: user_i

我似乎已经在这方面遇到了心理障碍,希望有人能朝着正确的方向踢我一脚

我有一个类似于新闻阅读器客户端的web应用程序。它是用Python编写的,并使用SQLAlchemy,但这在这里并不重要,因为我试图了解SQL,而且我使用SQLite作为后端

有一个Users表和Articles表,Users表非常明显,Articles表存储单个文章(如新闻服务器上的文章)。我使用另一个表Users\u Articles通过多个关系跟踪哪个用户读过哪篇文章

(缩减)模式如下所示:

Users:
  user_id
  user_name

Articles:
  article_id
  article_body

Users_Articles:
  user_id
  article_id

我试图做的是选择一个文章列表,但也要显示当前用户已经阅读了哪些文章,因此我想在SELECT语句中的列集合中添加一个布尔列,指示用户文章中是否有一行引用了当前用户的文章。

您可以使用左键加入

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

谢谢你的回答,非常直截了当,但出于某种原因,我无法集中注意力。