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


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

相关文章:

  • 2021-12-05
  • 2022-12-23
  • 2021-09-29
  • 2021-11-12
  • 2021-10-15
  • 2022-03-03
  • 2022-12-23
猜你喜欢
  • 2021-07-28
  • 2021-11-20
  • 2021-12-16
  • 2021-09-01
  • 2022-12-23
  • 2021-09-17
  • 2021-06-27
相关资源
相似解决方案