使用条件表达式和SQLalchemy指定多个备用Join条件

时间:2019-03-28 22:41:49

标签: python sql sqlalchemy

我要在SQLalchemy中加入两个表。如果满足特定条件,我想在右表的'C'列上连接,否则我想在右表的'D'列上连接。

对于原始SQL,我将使用CASE语句。我尝试在SQLalchemy中实现此功能,但收到此错误:

  

TypeError:“ bool”对象不可迭代

这是我在原始SQL中编写语句的方式:

SELECT 
t1.A, 
t2.B
FROM t1
JOIN t2 ON CASE
    WHEN t2.E = '1' THEN t2.C
    ELSE t2.D
END LIKE t1.CD || %

以及我如何尝试在SQLalchemy中编写它:

select([t1.columns.A, t2.columns.B]).select_from(
   t1.join(t2, case([t2.columns.E == '1', t2.columns.C], 
   else_=t2.columns.D).like(t1.columns.CD + '%')))

2 个答案:

答案 0 :(得分:1)

我的case语句的语法错误。条件应该是一个用括号括起来的元组。代替:

case([t2.columns.E == '1', t2.columns.C], else_=t2.columns.D)

应为:

case([(t2.columns.E == '1', t2.columns.C)],  else_=t2.columns.D)

答案 1 :(得分:-1)

我认为您不能将like语句用作连接条件。您可以进行笛卡尔积连接,并在其中带有“ like”的where语句。

SELECT t1.A, t2.B
FROM t1, t2
where CASE WHEN t2.E = '1' THEN t2.C ELSE t2.D END LIKE t1.CD||'%'