我有两张 table 。 tools
表存储了用户可以在我们的网站上启用的所有可用工具的列表。
例如,如果 user_id
13
的用户安装了带有 tool_id
'mailchimp'
的工具,这将在包含 user_id
13
和 tool_id
'mailchimp'
的 user_tools 表中创建一个新行。
我们网站上有一个页面显示所有工具,其中一个部分显示当前已安装的工具,第二部分显示尚未安装的工具。
我想编写一个 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/