我听说我应该避免交叉连接,所以我的问题是,如果没有交叉连接,你将如何重写这个查询?
SELECT p.*, po.*, pt.*
FROM product p
CROSS JOIN LATERAL (
SELECT json_agg(name) AS product_options
FROM product_options po
WHERE po.p_id = p.id
) po
CROSS JOIN LATERAL (
SELECT json_agg(json_build_object('tag', tag)) AS tags
FROM product_tags pt
WHERE pt.p_id = p.id
) pt
WHERE p.id = 1
字符串
这里有一个小提琴的例子
http://sqlfiddle.com/#!17/be10d/35
重要的是,我需要一个数组的产品选项和标签的对象,但你可以看到这对小提琴的例子,所以我需要确切的这一行与这些领域,但没有交叉加入
2条答案
按热度按时间qybjjes11#
下面是使用
LEFT JOIN
的查询的等价形式:字符串
演示在这里
iswrvxsc2#
如果你正在和一个对joins过敏的人打交道,你根本不需要join:demo
字符串
两个相关的子查询都是标量的,这允许它们像这样向上移动。