繁体   English   中英

SELECT 上的子查询,其后带有条件 WHERE 子句

[英]Subquery on SELECT with conditional WHERE clause after it

所以我有三张桌子,

news

id|title                                                      |body                                                                                                                                                                                                                                                           |publised_at        |deleted_at|created_at         |
--+-----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------+----------+-------------------+
 1|Tax are Increasing Again, But Why?                         |Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor i|                   |          |2021-06-06 14:11:24|
 2|AwanKinton are Making Brand New University Named DragonBall|Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor i|                   |          |2021-06-06 14:11:24|
 3|AwanKinton Released New Car that Can Fly                   |Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor i|                   |          |2021-06-06 14:11:24|
 4|Indonesia National Team Are Not Gonna Make it to World Cup |Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor i|2021-06-06 14:11:24|          |2021-06-06 14:11:24|
10|10 Penyebab Istri Sebel Sama Suami                         |Sebel aslkdjas askldjlsajd alskdjlkas alskdjsalk asldkjaslk asdlkjasld asdljasl asldjsalk alsdjals lajsdlkaj                                                                                                                                                   |                   |          |2021-06-06 14:34:08|

topics

id|name         |created_at         |
--+-------------+-------------------+
 1|politics     |2021-06-06 18:43:13|
 2|economy      |2021-06-06 18:43:13|
 3|auto         |2021-06-06 18:43:13|
 4|education    |2021-06-06 18:43:13|
 5|tech         |2021-06-06 18:43:13|
 6|culture      |2021-06-06 18:43:13|
 7|money        |2021-06-06 18:43:13|
 8|sports       |2021-06-06 18:43:13|
 9|uncategorized|2021-06-06 18:43:13|

news_topics

id|news_id|topics_id|
--+-------+---------+
 1|      1|        7|
 2|      1|        4|
 3|      2|        3|
 4|      2|        4|
 5|      2|        5|
 6|      3|        3|
 7|      3|        4|
 8|      4|        8|

我想像这样返回它:

id|title                                                      |body                                                                                                                                                                                                                                                           |published_at|deleted_at|created_at         |t   |
--+-----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------+----------+-------------------+----+
 1|Tax are Increasing Again, But Why?                         |Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor i|            |          |2021-06-06 18:43:13|    |
 2|AwanKinton are Making Brand New University Named DragonBall|Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor i|            |          |2021-06-06 18:43:13|auto|
 3|AwanKinton Released New Car that Can Fly                   |Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor i|            |          |2021-06-06 18:43:13|auto|

我成功使用此查询返回该值

select "news".*, 
(
    SELECT STRING_AGG("topics"."name", ',') as "topics"
    FROM "topics"
    INNER JOIN "news_topics" ON "topics"."id" = "news_topics"."topics_id"
    WHERE "news_topics"."news_id" = "news"."id"
    AND "topics"."name" IN ('auto')
) AS "topics" 
from "news" 
where published_at IS NULL AND deleted_at IS null 
order by "created_at" 
asc limit 10

但是该查询有一个缺陷,在上述结果中有一行包含 null topics 当我添加AND topics IS NOT NULL后,它给了我错误SQL Error [42703]: ERROR: column "topics" does not exist ,这是有道理的,因为查询 Z977888440A0100CB30BA982 执行的顺序8.6741

我希望查询结果中不包含在topics上具有 null 值的行。 我怎么得到它?

不是使用相关子查询来获取列topics ,而是在连接表news_topics topics聚合,然后加入news

select n.*, t.topics 
from news n 
inner join (
  SELECT nt.news_id, STRING_AGG(t.name, ',') AS topics
  FROM topics t INNER JOIN news_topics nt
  ON t.id = nt.topics_id
  WHERE t.name IN ('auto')
  GROUP BY nt.news_id
) t ON t.news_id = n.id
where n.published_at IS NULL AND n.deleted_at IS null 
order by n.created_at asc limit 10

请参阅演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM