如何将 4 sql 个查询组合成一个具有良好性能的查询?
How to combine 4 sql queries into a single query with good performance?
我有问题要解决。首先,我将这个问题分成几个部分,因此我分别编写了四个查询,但现在我需要将它们放在一起,就好像它是对 return 一个单一结果的单一调用。我该怎么做?
1) 我select按照分店和门店采购
SELECT CD_PURCHASE FROM TB_PURCHASE_STORE WHERE CD_BRANCH = ? AND CD_STORE = ?
2)我验证购买的促销期是否在当前日期(今天)内
SELECT CD_PURCHASE, DT_BEGIN_PROMOTION, DT_END_PROMOTION FROM TB_PURCHASE
WHERE SYSDATE BETWEEN TO_DATE(DT_BEGIN_PROMOTION) AND TO_DATE(DT_END_PROMOTION)
3) 从购买代码中,我查看哪些产品是有效的
SELECT CD_PURCHASE, CD_PRODUCT FROM TB_PURCHASE_PRODUCT WHERE FL_ACTIVE = 1
4)最后,我return根据customer id
一些字段
SELECT CD_PURCHASE, CD_PRODUCT, ID_CUSTOMER, DT_LAST_PURCHASE
FROM TB_PURCHASE_SALES WHERE ID_CUSTOMER = ?
您尝试过以下查询吗?我假设你想要所有表的 INNER JOIN,并且 CD_PURCHASE 在所有表中都是常见的 link,CD_PRODUCT 是 TB_PURCHASE_PRODUCT 之间的 link和 TB_PURCHASE_SALES.
SELECT TPS.CD_PURCHASE,
TP.CD_PURCHASE, TP.DT_BEGIN_PROMOTION, TP.DT_END_PROMOTION,
TPP.CD_PURCHASE, TPP.CD_PRODUCT,
TPSS.CD_PURCHASE, TPSS.CD_PRODUCT, TPSS.ID_CUSTOMER, TPSS.DT_LAST_PURCHASE
FROM TB_PURCHASE_STORE TPS,
TB_PURCHASE TP,
TB_PURCHASE_PRODUCT TPP,
TB_PURCHASE_SALES TPSS
WHERE TPS.CD_BRANCH = ? AND TPS.CD_STORE = ?
AND TPS.CD_PURCHASE = TP.CD_PURCHASE
AND SYSDATE BETWEEN TO_DATE(TP.DT_BEGIN_PROMOTION) AND TO_DATE(TP.DT_END_PROMOTION)
AND TPP.CD_PURCHASE = TPS.CD_PURCHASE
AND TPP.FL_ACTIVE = 1
AND TPSS.CD_PURCHASE = TPS.CD_PURCHASE AND TPSS.CD_PRODUCT = TPP.CD_PRODUCT
AND TPSS.ID_CUSTOMER = ?
我有问题要解决。首先,我将这个问题分成几个部分,因此我分别编写了四个查询,但现在我需要将它们放在一起,就好像它是对 return 一个单一结果的单一调用。我该怎么做?
1) 我select按照分店和门店采购
SELECT CD_PURCHASE FROM TB_PURCHASE_STORE WHERE CD_BRANCH = ? AND CD_STORE = ?
2)我验证购买的促销期是否在当前日期(今天)内
SELECT CD_PURCHASE, DT_BEGIN_PROMOTION, DT_END_PROMOTION FROM TB_PURCHASE
WHERE SYSDATE BETWEEN TO_DATE(DT_BEGIN_PROMOTION) AND TO_DATE(DT_END_PROMOTION)
3) 从购买代码中,我查看哪些产品是有效的
SELECT CD_PURCHASE, CD_PRODUCT FROM TB_PURCHASE_PRODUCT WHERE FL_ACTIVE = 1
4)最后,我return根据customer id
一些字段SELECT CD_PURCHASE, CD_PRODUCT, ID_CUSTOMER, DT_LAST_PURCHASE
FROM TB_PURCHASE_SALES WHERE ID_CUSTOMER = ?
您尝试过以下查询吗?我假设你想要所有表的 INNER JOIN,并且 CD_PURCHASE 在所有表中都是常见的 link,CD_PRODUCT 是 TB_PURCHASE_PRODUCT 之间的 link和 TB_PURCHASE_SALES.
SELECT TPS.CD_PURCHASE,
TP.CD_PURCHASE, TP.DT_BEGIN_PROMOTION, TP.DT_END_PROMOTION,
TPP.CD_PURCHASE, TPP.CD_PRODUCT,
TPSS.CD_PURCHASE, TPSS.CD_PRODUCT, TPSS.ID_CUSTOMER, TPSS.DT_LAST_PURCHASE
FROM TB_PURCHASE_STORE TPS,
TB_PURCHASE TP,
TB_PURCHASE_PRODUCT TPP,
TB_PURCHASE_SALES TPSS
WHERE TPS.CD_BRANCH = ? AND TPS.CD_STORE = ?
AND TPS.CD_PURCHASE = TP.CD_PURCHASE
AND SYSDATE BETWEEN TO_DATE(TP.DT_BEGIN_PROMOTION) AND TO_DATE(TP.DT_END_PROMOTION)
AND TPP.CD_PURCHASE = TPS.CD_PURCHASE
AND TPP.FL_ACTIVE = 1
AND TPSS.CD_PURCHASE = TPS.CD_PURCHASE AND TPSS.CD_PRODUCT = TPP.CD_PRODUCT
AND TPSS.ID_CUSTOMER = ?