首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何绕过MySql中语法错误分区

问如何绕过MySql中语法错误分区
EN

Stack Overflow用户
提问于 2017-01-16 00:22:24
回答 2查看 1.6K关注 0票数 1

MySql引发运行此sql的ProgrammingError

代码语言:javascript
复制
SELECT parents.uuid AS parents_uuid, children.uuid AS children_uuid,
children.parent_uuid AS children_parent_uuid, 
count(*) OVER (PARTITION BY parents.uuid) AS children_count
FROM parents, children
WHERE children.parent_uuid = parents.uuid ORDER BY children_count DESC

错误:

代码语言:javascript
复制
sqlalchemy.exc.ProgrammingError: (_mysql_exceptions.ProgrammingError) (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(PARTITION BY parents.uuid)' at line 1") [SQL: 'SELECT parents.uuid AS parents_uuid, children.uuid AS children_uuid, children.parent_uuid AS children_parent_uuid, count(*) OVER (PARTITION BY parents.uuid)']

使用模式,其中Parent可以有多个children,而Child只有一个parent

代码语言:javascript
复制
Base = declarative_base()
class Parent(Base):
    __tablename__ = 'parents'
    uuid = Column(String(64), primary_key=True, unique=True)
    def __init__(self):  
        self.uuid = uuid.uuid4()   

class Child(Base):
    __tablename__ = 'children'
    uuid = Column(String(64), primary_key=True, unique=True)
    parent_uuid = Column(String(64), ForeignKey('parents.uuid'))
    def __init__(self, parent_uuid=None):  
        self.uuid = uuid.uuid4()   
        self.parent_uuid = parent_uuid
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-16 00:48:23

MySQL中不支持窗口函数。要解决此问题,请使用相关子查询来获取计数。

代码语言:javascript
复制
SELECT 
p.uuid AS parents_uuid, 
c.uuid AS children_uuid,
c.parent_uuid AS children_parent_uuid, 
(SELECT COUNT(*) FROM children WHERE parent_uuid = p.uuid) AS children_count
FROM parents p
JOIN children c ON c.parent_uuid = p.uuid 
ORDER BY children_count DESC

或者使用派生表获取计数并将其join到现有查询。

代码语言:javascript
复制
SELECT 
p.uuid AS parents_uuid, 
c.uuid AS children_uuid,
c.parent_uuid AS children_parent_uuid, 
counts.children_count
FROM parents p
JOIN (SELECT parent_uuid,COUNT(*) as children_count
      FROM children 
      GROUP BY parent_uuid) counts ON counts.parent_uuid = p.uuid 
JOIN children c ON c.parent_uuid = p.uuid 
ORDER BY counts.children_count DESC
票数 2
EN

Stack Overflow用户

发布于 2021-06-12 00:03:18

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

https://stackoverflow.com/questions/41663346

复制
相关文章

相似问题

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