postgresql WITH语句找不到辅助语句

时间:2017-01-26 07:22:12

标签: postgresql

我有这个问题:

WITH words_not AS (
        SELECT keywords.id 
        FROM keywords 
        WHERE keyword = any(array['writing'])
    ),actes_not AS (
        SELECT actes_keywords.acte_id 
        FROM actes_keywords 
        WHERE actes_keywords.keyword_id IN (words_not)
    )
    SELECT  actes.id, 
            actes.acte_date 
    FROM actes 
    WHERE actes.id <> all(actes_not);

这会返回以下错误:

ERROR:  column "words_no" does not exist
LINE 1: ...ctes_keywords WHERE actes_keywords.keyword_id IN (mots_non))...

WITH查询中的每个辅助语句都很好(经过测试),我认为我非常接近手册:https://www.postgresql.org/docs/current/static/queries-with.html

我不明白为什么不能识别WITH查询中的辅助语句。

1 个答案:

答案 0 :(得分:1)

您不能在IN (..)子句中使用表引用。您需要一个子查询:

WITH words_not AS (
  SELECT keywords.id 
  FROM keywords 
  WHERE keyword = any(array['writing'])
), actes_not AS (
  SELECT actes_keywords.acte_id 
  FROM actes_keywords 
  WHERE actes_keywords.keyword_id IN (select id from words_not) --<< HERE
)
SELECT  actes.id, 
        actes.acte_date 
FROM actes 
WHERE actes.id <> all(select id from actes_not); --<< HERE