我要在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 + '%')))
答案 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||'%'