Truy vấn của bạn đã kết thúc. json_each()
là chức năng chính. Hoặc jsonb_each() cho jsonb . Một số cải tiến:
SELECT *
FROM things t
WHERE EXISTS (
SELECT FROM json_each(t.blueprint) b
WHERE b.value->>'name' ILIKE 'azamund'
);
sqlfiddle
cũ
db <> fiddle tại đây
-
json_each()đã trả về giá trị làjsonloại dữ liệu. Không cần diễn viên bổ sung. -
Tốt hơn, hãy sử dụng
LATERALtham chiếu trongEXISTS. Điều này gọn gàng hơn nhiều so với việc bỏ ghi chú bằng hàm set-return trongSELECTdanh sách. Có liên quan: -
Sử dụng
ILIKE(~~*) cho phù hợp với mẫu. Đối sánh cụm từ thông dụng (~,~*) mạnh hơn, nhưng cũng đắt hơn. Vì vậy, hãy sử dụngLIKEcơ bản /ILKEnơi bạn có thể. Chi tiết:
Thay thế với mảng JSON
Bạn đã thấy câu trả lời liên quan của tôi cho mảng JSON:
Mặc dù truy vấn cho các đối tượng JSON lồng nhau có vẻ đơn giản nhưng có hỗ trợ chỉ mục vượt trội cho mảng:
Có thể trở nên đơn giản / hiệu quả hơn với SQL / JSON trong Postgres 12 ...