![](/img/trans.png)
[英]SQL join a table that has an array field with the primary key of another table
[英]SQL how to join on another field if the first field has letters in it
我有一个看起来像这样的 SQL 连接
INNER JOIN UPLOAD PH on cast(p.PickTicket_Number as varchar(20))=PH.FIELD004
但是,有时,我真正想加入的领域是 PH.FIELD003。 当 PH.FIELD004 是一个包含字母的不同字段时,就会发生这种情况。 如何在 ON 子句中包含一个条件,如果 field004 中没有字母(是数字),它会像上面那样连接,但如果它确实有字母,它会连接到 pickticket number = field003?
你可以这样表达逻辑:
UPLOAD PH
ON cast(p.PickTicket_Number as varchar(20)) = PH.FIELD004 OR
(TRY_CONVERT(int, PH.FIELD004) IS NULL AND
CAST(p.PickTicket_Number as varchar(20)) = PH.FIELD003
)
笔记:
FIELD004
不能转换为INT
。 希望这足够接近“里面有字母”。 如果没有,您可以将CASE
表达式与LIKE
一起使用。OR
是JOIN
条件的性能杀手。 Function 调用(比如转换)也会阻碍优化器。INT
; 如果不是,请更改为适当的类型。由于上一个问题,我建议:
UPLOAD PH
ON TRY_CONVERT(INT, PH.FIELD004) = p.PickTicket_Number OR
(TRY_CONVERT(int, PH.FIELD004) IS NULL AND
p.PickTicket_Number= PH.FIELD003
)
假设 PickTicket_Number 和 FIELD003 是整数, FIELD004 是 varchar:
INNER JOIN UPLOAD PH ON p.PickTicket_Number = TRY_CAST(PH.FIELD004 AS INT) OR
p.PickTicket_Number = PH.FIELD003
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.