【问题标题】:SQLAlchemy Conjunction with Parentheses带括号的 SQLAlchemy 连词
【发布时间】:2015-07-08 03:56:02
【问题描述】:

我正在尝试在 sqlalchemy 核心中生成以下 sql。我无法让连词 AND OR 中的括号出现。

select from member t1 
inner join member t2 
 on (
        (
          t1.first_name = t2.last_name and 
          t1.last_name = t2.first_name and 
          t1.dob = t2.dob
        )
        or (
             t1.last_name = t2.last_name and 
             t1.first_name = t2.first_name and 
             t1.dob = t2.dob
           )
    )
group by t2.id

我正在使用的 sqlalchemy 核心语句是:

selStmt = select([t1]).select_from(
    t1.join(
            t2, or_(
                    and_(
                         t1.c.first_name == t2.c.last_name,
                         t1.c.last_name == t2.c.first_name,
                         t1.c.dob == t2.c.dob
                         ),
                    and_(
                         t1.c.last_name == t2.c.last_name,
                         t1.c.first_name == t2.c.first_name,
                         t1.c.dob == t2.c.dob
                         )
                    )
            )
        ).group_by(t2.c.id)

生成的sql代码为:

SELECT t1
    FROM t1 
    JOIN t2 ON 
        t1.first_name = t2.last_name AND 
        t1.last_name = t2.first_name AND 
        t1.dob = t2.dob OR 
        t1.last_name = t2.last_name AND 
        t1.first_name = t2.first_name AND 
        t1.dob = t2.dob 
    GROUP BY t2.id

由于括号不包括在内,逻辑不正确。如何在连词中获得括号?

【问题讨论】:

  • 逻辑正确,and 的优先级高于or

标签: sqlalchemy parentheses on-clause


【解决方案1】:

显然,AND 操作的优先级高于 OR。因此,在我的情况下,括号不是必需的。

【讨论】:

    猜你喜欢
    • 2016-05-08
    • 2013-01-18
    • 2014-11-13
    • 2013-05-25
    • 1970-01-01
    • 2022-12-17
    • 2011-03-07
    • 1970-01-01
    • 2015-06-04
    相关资源
    最近更新 更多