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

标签 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(string_to_array(na.news_category_id, ','))::int rowz 来自新闻文章;

我的 table 是 -

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;

诀窍是您取消嵌套数组到一组记录中,然后将其用作子查询。

然而,结果看起来很傻。您是否想要包含 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;

关于sql - 如何在 sql 查询中添加带有 unnest 的 where 子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28211749/

相关文章:

android - 从sqlite3数据库中检索图像并直接显示在kivy窗口上

PostgreSQL 9.3 :Dynamic Cross tab query

node.js - Seqeulize PostgreSQL ORM (Node.js) 中的 CHECK 约束

postgresql - 引用分区表时在 PostgreSQL 中进行分区

mysql - 获取给定时期 MySQL 查询的可用马厩

sql - 数据库的原始副本导致 `Can' t 查找文件 :`

mysql - 如何持续同步/合并两个 MySQL 数据库到第三个数据库

java - 根据特定条件在 Oracle SQL 数据库中添加值

SQL查询问题

sql - Oracle:如何在比较操作中从子查询中引用带有空格的别名