簡體   English   中英

使用帶有SQLalchemy的條件表達式指定多個備用連接條件

[英]Specify multiple alternate Join conditions using conditional expression with 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 + '%')))

我的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)

我不認為你可以做一個類似的聲明作為連接條件。 你可以做一個笛卡爾積產品加入,並在其中做一個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||'%'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM