Postgres không có một tương đương với kết nối bằng. Bạn sẽ cần bật mô-đun. Nó được tắt theo mặc định.
Được gọi là tablefunc. Nó hỗ trợ một số chức năng crosstab mát mẻ cũng như quen thuộc "kết nối bằng" và "Bắt đầu với". Tôi đã tìm thấy nó hoạt động nhiều hơn một cách hùng hồn và hợp lý hơn CTE đệ qui. Nếu bạn không thể có được điều này bởi DBA của bạn, bạn nên đi cho cách Erwin đang làm nó.
Cũng đủ mạnh để thực hiện truy vấn loại "hóa đơn nguyên liệu".
Tablefunc có thể được bật bằng cách chạy lệnh này:
CREATE EXTENSION tablefunc;
Dưới đây là danh sách các lĩnh vực kết nối mới nâng lên từ các tài liệu chính thức.
Parameter: Description
relname: Name of the source relation (table)
keyid_fld: Name of the key field
parent_keyid_fld: Name of the parent-key field
orderby_fld: Name of the field to order siblings by (optional)
start_with: Key value of the row to start at
max_depth: Maximum depth to descend to, or zero for unlimited depth
branch_delim: String to separate keys with in branch output (optional)
Bạn thực sự nên xem trang tài liệu. Nó được viết tốt và nó sẽ cung cấp cho bạn các tùy chọn bạn đã quen. (Trên trang tài liệu, hãy cuộn xuống gần dưới cùng.)
Postgreql "Connect by" extension Dưới đây là mô tả về cấu trúc của cấu trúc đó. Có rất nhiều tiềm năng vì vậy tôi sẽ không làm điều đó công bằng, nhưng đây là một snip của nó để cung cấp cho bạn một ý tưởng.
connectby(text relname, text keyid_fld, text parent_keyid_fld
[, text orderby_fld ], text start_with, int max_depth
[, text branch_delim ])
Truy vấn thực sẽ trông như thế này. Connectby_tree là tên của bảng. Dòng bắt đầu bằng "AS" là cách bạn đặt tên cho các cột. Nó trông hơi lộn ngược.
SELECT * FROM connectby('connectby_tree', 'keyid', 'parent_keyid', 'pos', 'row2', 0, '~')
AS t(keyid text, parent_keyid text, level int, branch text, pos int);
Tôi nghĩ rằng bạn muốn sử dụng [VỚI đệ quy] (http://www.postgresql.org/docs/9.3/static/queries-with.html) –
http://stackoverflow.com/ q/22626394/330315 –