当前位置: 首页 > 面试题库 >

在Postgresql的where子句中使用Alias列

孔棋
2023-03-14
问题内容

我有这样的查询:

SELECT
    jobs.*, 
    (
        CASE
            WHEN lead_informations.state IS NOT NULL THEN lead_informations.state
            ELSE 'NEW'
        END
    ) AS lead_state
FROM
    jobs
    LEFT JOIN lead_informations ON
        lead_informations.job_id = jobs.id
        AND
        lead_informations.mechanic_id = 3
WHERE
    lead_state = 'NEW'

出现以下错误:

PGError: ERROR:  column "lead_state" does not exist
LINE 1: ...s.id AND lead_informations.mechanic_id = 3 WHERE (lead_state...

在MySql中,这是有效的,但显然在Postgresql中是无效的。据我所知,原因是SELECT查询部分的评估晚于该WHERE部分。是否有解决此问题的常用解决方法?


问题答案:

正如您所经历的那样,MySQL的支持是非标准的。正确的方法是重新打印SELECT子句中使用的相同表达式:

SELECT
    jobs.*, 
    CASE 
         WHEN lead_informations.state IS NOT NULL THEN lead_informations.state 
         ELSE 'NEW' 
    END AS lead_state
FROM
    jobs
    LEFT JOIN lead_informations ON
        lead_informations.job_id = jobs.id
        AND
        lead_informations.mechanic_id = 3
WHERE
    lead_informations.state IS NULL


 类似资料:
  • 问题内容: 我知道我可能需要进行分组才能完成此任务,但我不太了解。PostgreSQL 8.1 我需要将结果集限制为“原始> 2017-01-01”。原始设置在第11行中。它在Excel中作为一列返回,是一个日期。 目前,它返回的结果可以追溯到几年前的数据,而我们并不需要它。 更新:我已将选择内容更改为这样,它似乎正在工作-是否对这样做是否正确有任何想法?它只会一直盯着过去的180天。 问题答案:

  • 问题内容: 在WHERE子句中有使用SELECT语句描述的名称吗?这是好/不好的做法吗? 这会是更好的选择吗? 它远没有那么优雅,但是运行起来比以前的版本要快。我不喜欢它,因为它在GUI中没有非常清晰地显示(并且SQL初学者需要理解它)。我可以将其分为两个独立的查询,但是随后事情变得混乱了…… 注意:我不仅需要日期和分数(例如姓名) 问题答案: 称为相关子查询。它有它的用途。

  • 问题内容: 我正在尝试使用该子句从表中检索数据。我想从中获取除存在的行以外的所有行。据我了解,以下内容不起作用: 我可以使用的唯一方法似乎是从相同的表中选择,或者从不同的表中选择具有相同列名的列。 有人可以解释一下如何最好地使用解释子句吗? 问题答案: 您的查询似乎完全有效: 列 名 与查询无关。只有 数据类型 必须匹配。您的查询的输出列名称为,仅因为它是first中的列名称。您可以使用任何别名。

  • 问题内容: 我想在Derby数据库中模拟以下类型的查询(即Microsoft SQL Server语法)的效果。目标是返回表中存储在“ someColumn”中的日期少于7天的所有记录。这是我希望实现的Microsoft SQL语法… 我已经能够确定在Derby中它将涉及使用timestampdiff函数。但是我不知道Derby中WHERE子句中函数用法的语法,因此我找不到任何示例。我发现了很多在

  • 问题内容: 假设我有这张桌子 我想返回第一行,其中所有先前现金的总和大于某个值: 因此,例如,如果我要返回第一行,其中所有先前现金的总和都大于500,则应返回到第3行 如何使用mysql语句执行此操作? 使用 不起作用 问题答案: 您只能在HAVING子句中使用聚合进行比较: 该子句要求您定义GROUP BY子句。 要获得第一行,其中所有先前现金的总和都大于某个值,请使用: 由于聚合函数发生在子查

  • 问题内容: 我想搜索我的表,其中有一列名字和一列姓氏。我目前接受来自某个字段的搜索字词,并将其与两列进行比较,一次 这对于单个单词搜索词可以正常工作,但结果集包含名称为“ Larry”的所有人。但是,如果有人输入名字然后输入空格,然后输入姓氏,我希望搜索结果更窄。我已经尝试了以下方法,但没有成功。 有什么建议吗? 编辑: 我正在测试的名称是“拉里·史密斯”。数据库将“ Larry”存储在“ fir