如何在SQL查询中使用unnest添加where子句?

7

我有一个类似这样的查询 -

select unnest(string_to_array(news_article.news_category_id, ',')):: int rowz
     from news_article) where rowz=1;

查询中加入rowz=1导致查询不起作用?如果我只想要rowz=1的结果,该怎么做呢?

当我这样做时-

从新闻文章中选择unnest(string_to_array(na.news_category_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

1
你能发布一小段数据样本吗? - mlinth
@mlinth在问题上添加了内容。 - dasamit7
你能添加一些输入数据吗?最好附带创建表和插入语句,这样我们就可以尝试运行查询了... - mlinth
1个回答

9
这是你的答案:

这回答了你的问题:

SELECT * FROM
  (SELECT unnest(string_to_array(news_article.news_category_id, ',')):: int rowz
   FROM news_article) AS categories
WHERE rowz = 1;

技巧在于将数组unnest为一组记录,然后将其用作子查询。
然而,结果看起来有些愚蠢。也许您想要所有新闻文章的详细信息,其中news_category_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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接