[SQL ] 用like连两张表的问题

楼主: azzc1031 (azzc1031)   2020-06-19 11:47:47
我有两张表要连
表1 : [料号]/ [价格]
ex. Banana / $50
ex. BananaG17 /$65
表2 : [料号]/[厂商]/[日期]
ex. Banana 2.0 / A厂商 /20200513
ex. BananaG17 1.0 / B厂商 / 20200603
其中表2的[料号]在字尾还呈现了1.0/2.0等等字串
但那可以忽略
我的SQL server语法是这样的:
表1 right join 表2
on 表2.[料号] like 表1.[料号] +’%’
但问题来了
BananaG17 1.0这系列的料号会有两种价格
因为它会同时找到
Banana的$50和BananaG17的$65!
请问这种情况该怎么办?
请救救快崩溃的数据分析师QQ 感谢!
作者: gamania54088 (Maple)   2020-06-19 14:09:00
改用substring去把表2的料号用空白切开只取左半部再用相等的方式join起来试试
作者: ken218 (ken218)   2020-06-19 21:59:00
%前面有空格怎么还会捞到BananaG17?抱歉眼残,表2.[料号] like 表1.[料号] + ' %' 应该可以% 前面加个空格
楼主: azzc1031 (azzc1031)   2020-06-19 23:15:00
感谢两位,都是不错的方法,我再试试!
作者: MOONY135 (谈无欲)   2020-06-20 21:33:00
是说为什么不直接left join就好 看起来一对一阿Banana% and BananaG17%这样不行吗
楼主: azzc1031 (azzc1031)   2020-06-21 12:18:00
忘记说表2有70多万笔资料,这两笔是举例而已
作者: tedcat (动静:MSN暱称为主)   2020-07-12 12:39:00
推文方法2应该不可行,banana%会涵盖g17
作者: rockchangnew (rock)   2020-07-12 23:19:00
这资料表设计就有问题,料号为何用文字来like,这样效能根本悲剧
作者: mathrew (Joey)   2020-07-13 08:11:00
同楼上,一开始设计就有问题了
作者: mered (mered)   2020-07-22 10:45:00
同上,应先处理料号的命名跟分类方式,这样就不用使用like,可直接使用‘=’,或者先做group出你要的资料,再用新字段做重新命名
作者: hmsDEBBIE (*黛比*)   2020-07-29 23:25:00
先用substr及group by处理表2的料号字段,再来join

Links booklink

Contact Us: admin [ a t ] ucptt.com