HUE SQL多表关联WHERE子句channel字段匹配问题咨询
解决t1与order表的channel字段匹配问题
正确的匹配逻辑实现
你需要调整匹配条件,直接针对t1的channel值做分支判断,而非替换成拼接字符串。推荐将逻辑写在JOIN的ON条件中(比写在WHERE子句更高效):
SELECT * FROM t1 JOIN `order` ON t1.orderid = `order`.orderid AND ( -- t1为online/instore时精准匹配 t1.channel = `order`.channel -- t1为both时匹配order的任意渠道 OR t1.channel = 'both' );
如果更习惯写在WHERE子句中,也可以这样实现:
SELECT * FROM t1 JOIN `order` ON t1.orderid = `order`.orderid WHERE (t1.channel = `order`.channel) OR (t1.channel = 'both');
之前方法失效的原因
你之前将both替换为onlineinstore后用like匹配,逻辑方向错误:order.channel like t1.channel是用短字符串匹配长字符串(比如'online' like 'onlineinstore'),结果永远为假,自然无返回数据。即便反过来写t1.channel like concat('%', order.channel, '%')能实现效果,但这种写法不如直接分支判断清晰高效,不推荐使用。
内容的提问来源于stack exchange,提问作者user15676
相关产品推荐
相关产品推荐

