Tôi có hai bảng beard
và moustache
định nghĩa dưới đây:RIGHT OUTER JOIN trong SQLAlchemy
+--------+---------+------------+-------------+
| person | beardID | beardStyle | beardLength |
+--------+---------+------------+-------------+
+--------+-------------+----------------+
| person | moustacheID | moustacheStyle |
+--------+-------------+----------------+
tôi đã tạo ra một truy vấn SQL trong PostgreSQL mà sẽ kết hợp hai bảng này và tạo ra kết quả sau:
+--------+---------+------------+-------------+-------------+----------------+
| person | beardID | beardStyle | beardLength | moustacheID | moustacheStyle |
+--------+---------+------------+-------------+-------------+----------------+
| bob | 1 | rasputin | 1 | | |
+--------+---------+------------+-------------+-------------+----------------+
| bob | 2 | samson | 12 | | |
+--------+---------+------------+-------------+-------------+----------------+
| bob | | | | 1 | fu manchu |
+--------+---------+------------+-------------+-------------+----------------+
Truy vấn:
SELECT * FROM beards LEFT OUTER JOIN mustaches ON (false) WHERE person = "bob"
UNION ALL
SELECT * FROM beards b RIGHT OUTER JOIN mustaches ON (false) WHERE person = "bob"
Tuy nhiên tôi không thể tạo đại diện SQLAlchemy của nó. Tôi đã thử một số cách để triển khai from_statement
đến outerjoin
nhưng không có cách nào thực sự hiệu quả. Bất cứ ai có thể giúp tôi với nó?
gì mà "ON" khoản nghĩa là? –
nó không thực hiện kiểm tra để thực hiện 'join' –
Tại sao bạn muốn kết quả được biểu diễn trong định dạng này chứ không phải là một lớp' Person' và hai mối quan hệ 'Person.beards' và' Person.mustashes'? Về cơ bản câu hỏi của tôi là: tại sao sử dụng 'sqlalchemy' để làm một cái gì đó để' SQL'? Nếu bạn có các mối quan hệ được định nghĩa, bạn có thể chỉ phát hành các phiên 'session.query (Person) .options (linkedload ('beards')). tương tự, nhưng kết quả sẽ vẫn là một cá thể của 'Person' và không phải là một' tuple'. – van