首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLSoup多重连接

SQLSoup多重连接
EN

Stack Overflow用户
提问于 2014-04-07 16:50:21
回答 1查看 382关注 0票数 0

我想使用SQLSoup查询MySQL数据库。

我要发出的查询包含多个联接。不幸的是,教程示例涉及的表具有完全不同的列名(表之间没有重复的列名)。

在我的情况下,我的所有表都有一个名为pkeyid列。

我所做的工作如下:

代码语言:javascript
复制
s = SQLSoup(DATABASE_URI)
s.join(s.logical_interface, s.with_labels(s.physical_interface), s.physical_interface.id == s.logical_interface.physical_interface_id).first()

其结果是:

代码语言:javascript
复制
InvalidRequestError: Implicitly combining column logical_interface.physical_interface_id with column foo.physical_interface_id under attribute 'physical_interface_id'.  Please configure one or more attributes for these same-named columns explicitly

因此,我做以下工作: s.logical_interface.physical_interface_id).first() (s.with_labels(s.logical_interface),s.with_labels(s.physical_interface),s.physical_interface.id == s.physical_interface.id)

结果(请参阅下面的完整查询):

代码语言:javascript
复制
OperationalError: (OperationalError) (1066, "Not unique table/alias: 'foo'") 'SELECT foo.logical_interface_id AS ... 

似乎每个表都使用相同的表别名foo,这显然会带来麻烦。

有正确的方法吗?

完整查询:

代码语言:javascript
复制
'SELECT foo.logical_interface_id AS foo_logical_interface_id, foo.logical_interface_physical_interface_id AS foo_logical_interface_physical_interface_id, foo.logical_interface_name AS foo_logical_interface_name, foo.logical_interface_description AS foo_logical_interface_description, foo.logical_interface_active AS foo_logical_interface_active, foo.logical_interface_ifindex AS foo_logical_interface_ifindex, foo.logical_interface_ifinoctets AS foo_logical_interface_ifinoctets, foo.logical_interface_ifoutoctets AS foo_logical_interface_ifoutoctets, foo.logical_interface_lastpolloctets AS foo_logical_interface_lastpolloctets, foo.logical_interface_ifsigqunerroreds AS foo_logical_interface_ifsigqunerroreds, foo.logical_interface_ifsigqcorrecteds AS foo_logical_interface_ifsigqcorrecteds, foo.logical_interface_ifsigquncorrectables AS foo_logical_interface_ifsigquncorrectables, foo.logical_interface_lastpollfec AS foo_logical_interface_lastpollfec, foo.physical_interface_id AS foo_physical_interface_id, foo.physical_interface_docsis_mac_id AS foo_physical_interface_docsis_mac_id, foo.physical_interface_name AS foo_physical_interface_name, foo.physical_interface_type AS foo_physical_interface_type, foo.physical_interface_module AS foo_physical_interface_module \nFROM (SELECT logical_interface.id AS logical_interface_id, logical_interface.physical_interface_id AS logical_interface_physical_interface_id, logical_interface.name AS logical_interface_name, logical_interface.description AS logical_interface_description, logical_interface.active AS logical_interface_active, logical_interface.ifindex AS logical_interface_ifindex, logical_interface.ifinoctets AS logical_interface_ifinoctets, logical_interface.ifoutoctets AS logical_interface_ifoutoctets, logical_interface.lastpolloctets AS logical_interface_lastpolloctets, logical_interface.ifsigqunerroreds AS logical_interface_ifsigqunerroreds, logical_interface.ifsigqcorrecteds AS logical_interface_ifsigqcorrecteds, logical_interface.ifsigquncorrectables AS logical_interface_ifsigquncorrectables, logical_interface.lastpollfec AS logical_interface_lastpollfec \nFROM logical_interface) AS foo INNER JOIN (SELECT physical_interface.id AS physical_interface_id, physical_interface.docsis_mac_id AS physical_interface_docsis_mac_id, physical_interface.name AS physical_interface_name, physical_interface.type AS physical_interface_type, physical_interface.module AS physical_interface_module \nFROM physical_interface) AS foo ON physical_interface.id = logical_interface.physical_interface_id \n LIMIT %s' (1,)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-12 22:50:53

答案是“不”。

原因是SQLSoup没有被维护,而且已经过时了(我可以这么说,因为我是SQLSoup所拥有的唯一的维护者)。使用自动机,我写了它作为SQLSoup的现代替代品。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22918450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档