postgres: LEFT JOIN table 并且字段不存在

postgres: LEFT JOIN table and field does not exist

这是我的查询

SELECT org.id,
                org.name,
                org.type,
                org.company_logo,
                (SELECT org_profile.logo_url FROM org_profile WHERE org_profile.org_id = org.id AND org_profile.status = 'active' ORDER BY org_profile.id DESC LIMIT 1) as logo_url,
                org.short_description,
                org_profile.value_prop,
                count(*) OVER () AS total
                FROM org
                LEFT JOIN user_info ON user_info.id = org.approved_by
                INNER JOIN (select distinct org_profile.org_id from org_profile) org_profile ON org_profile.org_id = org.id
                WHERE
                org.type = 'Fintech'
                AND org.status = 'APPROVED'
                AND org.draft != TRUE
                ORDER BY org.id DESC
            

我在 org_profile table 中使用 LEFT JOIN 查询。我使用 distinct 作为唯一组织 ID,但问题是 org_profile.value_prop 列不起作用。错误显示 column org_profile.value_prop does not exist

我正在尝试解决这个问题。但是我没有搞清楚这个问题。

基本上,错误提示您尝试从 org_profile 子查询中获取 value_prop 字段,该字段基本上不存在。

只写在纸上很难给出有效的查询,但我认为:

  • 值得为每个子查询应用方便的 aliasses
  • 重复数据删除,如果需要,应该在子查询中完成。当使用 DISTINCT 的多个字段可能不足时 - 可能需要 RANK 函数。
  • 你做了一些操作来通过标量子查询获取 logo_url - 这看起来有点奇怪,尤其是在 JOIN 中使用了相同的 table - 我建议移动所有相关的逻辑org_profile 到子查询。如果在输出中发现多个值,标量表达式将引发错误。
SELECT 
  org.id,
  org.name,
  org.type,
  org.company_logo,
  prof.logo_url,
  org.short_description,
  prof.value_prop,
  count(*) OVER () AS total
FROM org
JOIN (
  select distinct org_id, logo_url, value_prop -- other deduplication type (RANK) may be required
  from org_profile
  where status = 'active' -- ?
) prof ON org.id = prof.org_id
LEFT JOIN user_info usr ON usr.id = org.approved_by
WHERE
  org.type = 'Fintech'
  AND org.status = 'APPROVED'
  AND org.draft != TRUE
ORDER BY org.id DESC