[英]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.