在Postgresql中搜索连接成1的2列时未定义的列

时间:2015-10-06 23:08:02

标签: postgresql ruby-on-rails-4 activerecord

问题

出于某种原因,我收到错误:

PG::UndefinedColumn: ERROR:  column "full_name" does not exist

对于以下查询:

User.select("first_name || ' ' || last_name as full_name").where("full_name = ?", "Jon Snow")

哪个转换为sql查询:

SELECT first_name || ' ' || last_name as full_name FROM \"users\" WHERE (full_name = 'Jon Snow')

目标

我的目的是能够通过用户查询全名,但我不想将其拆分,因为这是在更大的查询中使用的。

的尝试

我尝试过使用/不使用usersfirst_namelast_name周围的表名(full_name)的多种变体,并尝试添加/删除来自不同地点的引号/括号。我发现,如果我在没有where的情况下进行查询,然后检查full_name是什么,它实际上会正确收集它。 Concat似乎也会产生同样的错误。

可能的解决方案

如果我将concat移到where调用中,它似乎可以正常工作,而不是命名它:

User.where("CONCAT(first_name, ' ', last_name) = ?", "Jon Snow")

SQL:

"SELECT \"users\".* FROM \"users\" WHERE (CONCAT(first_name, ' ', last_name) = 'Jon Snow')

它似乎不像使用命名变量那么方便,但也许你不能这样做。

1 个答案:

答案 0 :(得分:1)

如果要引用SELECT子句中WHERE子句中的别名,则需要使用FROM中的子查询,例如

SELECT *
FROM (
  SELECT
    *,
    concat(first_name, ' ', last_name) AS full_name
  FROM some_table
  WHERE ...otherpredicates...
) x
WHERE full_name = 'Jim Bob';