SQL在子查询中使用来自join的表

标签 sql postgresql select join

我正在编写一个用作数据库 View 的查询,它现在看起来像这样:

SELECT
  contact.*,    
  contact_users.names AS user_names,
  contact_status.status_id AS status_id,
  status_translation.name AS status_name,
  status_translation.lang_id AS lang_id
FROM contacts as contact
LEFT JOIN contact_status AS contact_status ON contact_status.status_id = contact.status
LEFT JOIN contact_status_translation AS status_translation ON status_translation.id = contact.status
LEFT JOIN (
    SELECT
    contacts_users.contact_id,
      string_agg(users.fullname || ', ' || users.id, ' | ') as names  
  FROM v_contacts_users as contacts_users
  LEFT JOIN v_users as users on users.id = contacts_users.user_id
  WHERE users.lang_id = status_translation.lang_id
    GROUP BY contacts_users.contact_id
) AS contact_users ON contact_users.contact_id = contact.id  
WHERE contact.deleted = FALSE

除最后一个 LEFT JOIN 中的 WHERE 条件外,一切都按预期工作 - WHERE users.lang_id = status_translation.lang_id 部分表示status_translation 无法在这部分查询中引用?这是为什么?我尝试用各种方式引用此表,但结果仍然相同。v_users 也已翻译,因此我只需要从该表中获得一个结果。

最佳答案

如果您想引用以前的 FROM 列表条目,请在 LEFT JOIN 和左括号之间插入 LATERAL

关于SQL在子查询中使用来自join的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44135088/

相关文章:

sql - 查询以检查 SQL Server 中的重叠范围?

sql - 将数据从 SQL Server Express 导出到 CSV(需要引用和转义)

sql - PostgreSQL:当前行为空时重复最后一行结果的查询

MYSQL - SELECT IN () ORDER BY IN ()

jquery - 使用 Jquery 从第一个下拉列表中过滤第二个下拉列表

php - 从 MySQL 表中选择多行

sql - PostgreSQL:如何替换同一字段中的不同值?

sql - 最后一个预期列 CSV 之后的 Postgres 额外数据

jquery - Pharo Seaside - 如何在 html 中编辑标签后更新数据库条目

postgresql - 违反唯一约束导致整个 pq.CopyIn postgresql 导入失败