sql - 如果第二个表中存在数据,则使用标志连接来自两个 postgresql 表的数据

标签 sql postgresql join subquery left-join

我有两张 table 。 tools 表存储了用户可以在我们的网站上启用的所有可用工具的列表。

enter image description here

user_tools 表跟踪每个用户安装的工具。 enter image description here

例如,如果 user_id 13 的用户安装了带有 tool_id 'mailchimp' 的工具,这将在包含 user_id 13tool_id 'mailchimp' 的 user_tools 表中创建一个新行。

我们网站上有一个页面显示所有工具,其中一个部分显示当前已安装的工具,第二部分显示尚未安装的工具。

enter image description here

我想编写一个 SQL 查询来填充此页面。该查询必须获取所有工具并包含一个名为 installed 的 bool 列,如果用户已安装此工具,则该列为 true。我该怎么做?

我想我需要一个 OUTER JOIN,也许还有一个 EXISTS 子句,但无法弄清楚。

干杯。

最佳答案

您可以按如下方式使用 LEFT JOIN:

SELECT
    t.*,
    CASE WHEN u.tool_id IS NULL THEN 0 ELSE 1 END installed 
FROM 
    tools t
    LEFT JOIN user_tools u ON t.tool_id = t.tool_id AND u.user_id = ?

这将返回所有工具,并带有 installed 标志,指示每个工具是否已为当前用户安装。

问号应替换为当前正在浏览您网站的用户的 ID。

关于sql - 如果第二个表中存在数据,则使用标志连接来自两个 postgresql 表的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57861892/

相关文章:

mysql - 在重复时使用新键插入新行

python - 将 postgresql 与 sqlalchemy 连接起来

MySQL 只获取一列一次

MySQL 连接和第二个表中的字段作为结果中的列

sql - 联合和联合所有

sql - 从sql中的点数据库中获取路径

mysql - 我将如何加入这些表格?

database - 错误 : function addgeometrycolumn is not unique

postgresql - Pgbouncer:如何在 kubernetes 集群中正确运行

php - MySQL 查询执行时间过长。查询返回良好结果,但可能设计不佳