如何在sql查询中添加带有unnest的where子句?

如何在sql查询中添加带有unnest的where子句?,sql,database,postgresql,Sql,Database,Postgresql,我有一个这样的疑问- select unnest(string_to_array(news_article.news_category_id, ',')):: int rowz from news_article) where rowz=1; 由于将rowz=1放入查询中,此查询无法工作?如果我只想要在unnest之后rowz=1的结果,该如何做 当我这样做的时候- 选择unnest(字符串到数组(na.news\u category\u id,,)::int rowz 来自新闻报道

我有一个这样的疑问-

select unnest(string_to_array(news_article.news_category_id, ',')):: int rowz
     from news_article) where rowz=1;
由于将rowz=1放入查询中,此查询无法工作?如果我只想要在unnest之后rowz=1的结果,该如何做

当我这样做的时候-

选择unnest(字符串到数组(na.news\u category\u id,,)::int rowz 来自新闻报道

我的桌子是-

Create table news_article(
id                          bigserial NOT NULL PRIMARY KEY,
news_headline               character varying(70) NOT NULL,
news_content_src            character varying(240) NOT NULL,
news_language_id            integer NOT NULL,
news_category_id            character varying(50) NOT NULL,
news_publisher_id           integer NOT NULL references news_publishers(pub_id),
news_date                   timestamp WITH TIME ZONE Default now()
);
然后它给了我这个结果——

rowz
1
2
1
3
2

这回答了你的问题:

SELECT * FROM
  (SELECT unnest(string_to_array(news_article.news_category_id, ',')):: int rowz
   FROM news_article) AS categories
WHERE rowz = 1;
诀窍在于
将数组unest
放入一组记录中,然后将其用作子查询

然而,结果看起来很愚蠢。您是否需要包含
news\u category\u id=1
的新闻文章的所有详细信息,可能还有其他类别?在这种情况下:

SELECT a.*
FROM news_article a
JOIN (SELECT id, unnest(string_to_array(news_article.news_category_id, ',')):: int rowz
      FROM news_article) AS c ON c.id = a.id
WHERE c.rowz = 1;

你能发布一些数据样本吗?@mlinth添加到问题上你能添加一些输入数据吗?(理想情况下使用CREATETABLE和insert语句,以便我们可以尝试运行查询…)