gpt4 book ai didi

python - SQLAlchemy 中的右外连接

转载 作者:太空狗 更新时间:2023-10-29 21:03:47 35 4
gpt4 key购买 nike

我有两个表 beardmoustache 定义如下:

+--------+---------+------------+-------------+
| 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_statementouterjoin 的几种方法,但都没有真正奏效。谁能帮我解决这个问题?

最佳答案

在 SQL 中,A RIGHT OUTER JOIN B 等同于 B LEFT OUTER JOIN A。因此,从技术上讲,RIGHT OUTER JOIN API 中没有必要 - 可以通过切换目标“可选”和加入“可选”的位置来实现相同的目的。 SQL Alchemy 为此提供了一个 API:

# this **fictional** API:
query(A).join(B, right_outer_join=True) # right_outer_join doesn't exist in SQLA!

# can be implemented in SQLA like this:
query(A).select_entity_from(B).join(A, isouter=True)

参见 SQLA Query.join() doc ,部分“控制加入的内容”

关于python - SQLAlchemy 中的右外连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11400307/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com