我想知道是否可以在表列的json_array_elements和另一个表之间进行左外连接?像下面的东西,但这不起作用.
SELECT *
FROM foo,
json_array_elements (foo.bars :: json) foo_bars
LEFT OUTER JOIN bar ON (foo_bars ->> 'id') :: BIGINT = bar.ID;
Run Code Online (Sandbox Code Playgroud)
表结构如下所示
FOO
------------------------------------------
| ID | NAME | BARS |
|------------------------------------------|
| 1 | FOO1 | [{ "id" : 1}, { "id" : 2 }]|
|------------------------------------------|
| 2 | FOO1 | [] |
------------------------------------------
BAR
-------------
| ID | NAME |
|-------------|
| 1 | BAR1 |
|-------------|
| 2 | BAR2 |
-------------
Run Code Online (Sandbox Code Playgroud)
我希望查询的输出是
--------------------------------------------------------
| ID | NAME | BARS | ID | NAME |
|------------------------------------------|-------------|
| 1 | FOO1 | [{ "id" : 1}, { "id" : 2 }]| 1 | BAR1 |
|------------------------------------------|-------------|
| 1 | FOO1 | [{ "id" : 1}, { "id" : 2 }]| 2 | BAR2 |
|------------------------------------------|-------------|
| 2 | FOO1 | [] | null | null |
--------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
Jak*_*nia 15
要回答您的问题:是的,这是可能的,您的查询就是这样.我们可以通过在foo表格中引入第三行来证明这一点:http:
//sqlfiddle.com/#!15/06dfe/2
你的问题不是LEFT JOIN用于json_array_elements隐式横向交叉连接.您的查询相当于:
SELECT *
FROM foo
CROSS JOIN LATERAL json_array_elements (foo.bars :: json) foo_bars
LEFT OUTER JOIN bar ON (foo_bars ->> 'id') :: BIGINT = bar.ID;
Run Code Online (Sandbox Code Playgroud)
http://sqlfiddle.com/#!15/06dfe/5
你想要的是在foo和之间的左侧连接json_array_elements:
SELECT *
FROM foo LEFT JOIN LATERAL
json_array_elements (foo.bars :: json) foo_bars ON true
LEFT OUTER JOIN bar ON (foo_bars ->> 'id') :: BIGINT = bar.ID;
Run Code Online (Sandbox Code Playgroud)
http://sqlfiddle.com/#!15/06dfe/6
| 归档时间: |
|
| 查看次数: |
6403 次 |
| 最近记录: |