2017-04-26 56 views
0

查询的CTE:使用与= ANY

WITH first_names AS (SELECT DISTINCT fname FROM voters) 
SELECT name 
from nicknames 
WHERE groupi = (
    SELECT nn.groupi 
    FROM nicknames AS nn 
    WHERE name = 'john' 
) AND name != 'john' AND upper(name) = ANY(first_names); 

错误: column "first_names" does not exist

如何使一个数组从选择,并在那里语句中使用它?

回答

0

你在这里混淆辅助语句指定的列。 first_names是您的SELECT DISTINCT提供的结果的名称,而fname是其中包含的列的名称。

不对整个查询的正确性发表评论,更正的语句将使用正确的列名称。

WITH first_names AS (SELECT DISTINCT fname 
        FROM voters) 
SELECT name 
FROM nicknames 
WHERE groupi = (
    SELECT nn.groupi 
    FROM nicknames AS nn 
    WHERE name = 'john' 
) AND name != 'john' AND upper(name) = ANY (first_names.fname); 
0

try JOIN instead of ANY

WITH first_names AS (SELECT DISTINCT fname FROM voters) 
SELECT name 
from nicknames 
JOIN first_names on fname = upper(name) 
WHERE groupi = (SELECT nn.groupi FROM nicknames AS nn WHERE name = 'john') AND name != 'john' 
; 
相关问题