3

我正在尝试在 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

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

4

1 回答 1

1

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

于 2015-04-29T15:21:59.973 回答