【性能优化】EKPO/EKBE和LIPS做JOIN的问题
在STO交货的时候,有时候需要把表EKPO/EKBE和LIPS JOIN起来取数,但是有个问题,EKPO-EBELP是5位数,EKBE-BUZEI是4位数,而LIPS-POSNR是6位数!都不一样!
直接JOIN的话肯定是错误的。平常的做法就是先取一个表,然后用其他方法再取第二个表,但是,这样做导致程序复杂、性能差、维护难。
讲究一点的办法是借表取数,就是引入第三个表,这个表就相当于催化剂,使得SQL的效率大大提升。
创建一个透明表:
塞进去数据:
然后程序这样写:
妥了。
其他的借表取数的例子还有:
SELECT ... FROM EBAN WHERE EBELN =...
换成:
SELECT ... FROM EKET WHERE EBELN =...
SELECT ... FROM EBAN WHERE BANFN = EKET-BANFN...
SELECT ... FROM VBAK WHERE KUNNR = ...
换成:
SELECT ... FROM VBAKPA WHERE KUNDE = ...
SELECT ... FROM VBAK WHERE VBELN = VBKPA-VBELN...
SELECT ... FROM AFKO WHERE RSNUM = ...
换成:
SELECT ... FROM RESB WHERE RSNUM = ...
SELECT ... FROM AFKO WHERE AUFRN = RESB-AUFNR...
有时候,取数的表虽然多了,但是取数的效率却大大提升了。