[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