【性能优化】EKPO/EKBE和LIPS做JOIN的问题

在STO交货的时候,有时候需要把表EKPO/EKBE和LIPS JOIN起来取数,但是有个问题,EKPO-EBELP是5位数,EKBE-BUZEI是4位数,而LIPS-POSNR是6位数!都不一样!

直接JOIN的话肯定是错误的。平常的做法就是先取一个表,然后用其他方法再取第二个表,但是,这样做导致程序复杂、性能差、维护难。

讲究一点的办法是借表取数,就是引入第三个表,这个表就相当于催化剂,使得SQL的效率大大提升。


创建一个透明表:

【性能优化】EKPO/EKBE和LIPS做JOIN的问题


塞进去数据:

【性能优化】EKPO/EKBE和LIPS做JOIN的问题


然后程序这样写:

【性能优化】EKPO/EKBE和LIPS做JOIN的问题


妥了。


其他的借表取数的例子还有:

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...


有时候,取数的表虽然多了,但是取数的效率却大大提升了。