gpt4 book ai didi

postgresql - PostgreSQL 中与自身的多对多关系

转载 作者:行者123 更新时间:2023-11-29 11:49:53 26 4
gpt4 key购买 nike

使用 PostgreSQL,我有一个表,它应该与其自身具有多对多关系。该表称为 tools,我正在使用一个名为 integrations 的辅助表执行多对多操作,该表有两个字段,tool_a_idtool_b_id

有没有更好的方法?这样做的问题是,每当我想找到所有集成时,我都需要检查 tool_atool_b,如:

SELECT * FROM integrations
WHERE tool_a_id = x AND tool_b_id = x

或者当我想选择与另一个工具集成的所有工具时,我必须这样做:

SELECT "tools".* FROM tools, integrations
WHERE ((tools.id = integrations.tool_a_id AND integrations.tool_b_id = x)
OR (tools.id = integrations.tool_b_id AND integrations.tool_a_id = x))

例如,这不允许在 Rails 中轻松地将集成定义为一种关系,因为 Rails 期望一个且只有一个外键匹配。有没有更好的办法?感觉很不雅观。我不介意被 PostgreSQL 困住。

最佳答案

好吧,这就是我们从 RDBMS 书籍中学到的方法。 ;)

但是在您的 SQL 示例中,您没有正确定义对象。我认为您可能正在寻找更像这样的东西(具有相同的数据库架构):

SELECT t1.* FROM tools t1 JOIN integrations i ON (t1.id = i.tool_a_id)
JOIN tools t2 ON (t2.id = i.tool_b_id)
WHERE t2.id = x

这更优雅,因为它将 t1 标记为可供选择的工具列表,将 t2 标记为我将从中选择我想要的工具的列表知道哪些是集成到它的。

关于postgresql - PostgreSQL 中与自身的多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32869547/

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