PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Postgresql bên trái tham gia trên mảng json

Để trả lời câu hỏi của bạn:Có, hoàn toàn có thể và truy vấn của bạn thực hiện chính xác điều đó.Chúng tôi có thể chứng minh điều đó bằng cách giới thiệu hàng thứ ba trong foo bảng: http://sqlfiddle.com/#!15/06dfe/2

Vấn đề của bạn không phải là với LEFT JOIN tới json_array_elements nhưng với phép nối chéo bên ngầm định. Truy vấn của bạn tương đương với:

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;

http://sqlfiddle.com/#!15/06dfe/5

Những gì bạn muốn là một phép nối bên trái giữa foojson_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;

http://sqlfiddle.com/#!15/06dfe/6




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để xóa các mục trùng lặp?

  2. Khởi động lại Heroku Postgres Dev DB

  3. SQLAlchemy nhiều khóa ngoại trong một lớp được ánh xạ tới cùng một khóa chính

  4. pg_dump:[archiver (db)] truy vấn không thành công:ERROR:quyền bị từ chối đối với quan hệ abouts

  5. Lỗi cơ sở dữ liệu Postgres:quan hệ không tồn tại