我有两个表beard
和moustache
定义如下:RIGHT OUTER JOIN在SQLAlchemy的
+--------+---------+------------+-------------+
| person | beardID | beardStyle | beardLength |
+--------+---------+------------+-------------+
+--------+-------------+----------------+
| person | moustacheID | moustacheStyle |
+--------+-------------+----------------+
我已PostgreSQL中创建的SQL查询,这将结合这两个表,并产生如下结果:
+--------+---------+------------+-------------+-------------+----------------+
| person | beardID | beardStyle | beardLength | moustacheID | moustacheStyle |
+--------+---------+------------+-------------+-------------+----------------+
| bob | 1 | rasputin | 1 | | |
+--------+---------+------------+-------------+-------------+----------------+
| bob | 2 | samson | 12 | | |
+--------+---------+------------+-------------+-------------+----------------+
| bob | | | | 1 | fu manchu |
+--------+---------+------------+-------------+-------------+----------------+
查询:
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"
但是我无法创建它的SQLAlchemy表示形式。我尝试了几种实施from_statement
到outerjoin
的方法,但没有一个真正起作用。任何人都可以帮助我吗?
什么是“ON”条款意思? – 2012-07-09 17:50:51
它没有检查执行'加入' – 2012-07-09 17:52:47
为什么你想要以这种格式表示结果而不是'Person'类和两个关系'Person.beards'和'Person.mustashes'?基本上我的问题是:为什么使用'sqlalchemy'来做'SQL'这样的事情?如果你定义了关系,你可以发出'session.query(Person).options(joinedload('beards'))选项(joinedload('mustashes'))。all()',并且生成的查询将会非常相似,但结果仍然是'Person'的一个实例,而不是'tuple'。 – van 2012-07-09 21:54:35