2015-08-25 92 views
0

下面的查询返回保持一个missing FROM-clause entry for table "tags"错误,但我不知道为什么:缺少FROM子句中的SQL查询

SELECT tags.id, tags.user_id, LOWER(tags.tag) AS tag, tags.detail, us.email 
FROM user_settings us 
WHERE NOT EXISTS (
    SELECT 1 
    FROM UNNEST(ARRAY[$1]) AS selected_tags(tag) 
    LEFT JOIN admin.tags tags 
    ON tags.tag = selected_tags.tag 
    WHERE tags.user_id = us.id 
    AND selected_tags.tag IS NULL 
); 

回答

0

因为较低(tags.tag)和tags.detail在初始SELECT,你需要像下面这样的变化(注:新增陆续离开之后第一个FROM JOIN):

SELECT tags.id, tags.user_id, LOWER(atags.tag) AS tag, atags.detail, pl.email 
FROM user_settings us 
    LEFT JOIN admin.tags atags 
    ON tags.tag = selected_tags.tag 
WHERE NOT EXISTS (
    SELECT 1 
    FROM UNNEST(ARRAY[$1]) AS selected_tags(tag) 
    LEFT JOIN admin.tags tags 
    ON tags.tag = selected_tags.tag 
    WHERE tags.user_id = us.id 
    AND selected_tags.tag IS NULL 
); 
+0

在进行上述更改后,我得到了与表“tags”错误相同的'FROM-clause条目。 – MattDionis

0

你不能从一个WHERE NOT EXISTS子查询中进行选择。改用JOIN。

SELECT tags.id, tags.user_id, LOWER(tags.tag) AS tag, tags.detail, pl.email 
    FROM user_settings us 
    JOIN (
    SELECT 1 
    FROM UNNEST(ARRAY[$1]) AS selected_tags(tag) 
    LEFT JOIN admin.tags tags 
     ON tags.tag = selected_tags.tag 
    WHERE selected_tags.tag IS NOT NULL 
) t on t.user_id = us.id ; 
+0

更改为此结构后,出现'列t.user_id不存在'错误。 – MattDionis

相关问题