【发布时间】: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