我正在尝试使用关系主连接来连接两个表,其中连接是在table2中查找table1中名称的最长子字符串的结果。这个问题的标准postgres SQL有效 - 我正在尝试将其转换为SQLAlchemy连接。
sql是:
select distinct on (t1.name) t2.name
from table1 t1
join table2 t2
on t1.name like format('%%%s%%', t2.name) order by t1.name desc, char_length(t2.name) desc;
对于table1中的每个名称,它连接table2中的名称,该名称是table1中该名称的最长子字符串。
我面临的问题是将其转换为SQLALchemy关系,即
class Table1(db.Model):
__tablename__ = 'table1'
...
name = db.Column(db.String)
...
t1t2= db.relationship("Table2", primaryjoin="...")
答案 0 :(得分:0)
理论上,您可以按照以下方式执行此操作,但我不建议使用基于此类查询的关系。基本上你需要在查询中删除order by
。这可以通过子查询完成,如下所示:
select distinct on (t1.name) t2.name
from table1 t1
join table2 t2
on t1.name like format('%%%s%%', t2.name) and char_length(t2.name) = (select max(char_length(t3.name)) from table2 t3 where t1.name like format('%%%s%%', t3.name));
请记住,这可能会将table1中的一行与table2中的多行连接起来。