如何将 4 个 sql 查询组合成一个性能良好的查询?
Posted
技术标签:
【中文标题】如何将 4 个 sql 查询组合成一个性能良好的查询?【英文标题】:How to combine 4 sql queries into a single query with good performance? 【发布时间】:2021-08-27 01:05:38 【问题描述】:我有一个问题要解决。首先,我将这个问题分成几部分,因此我分别编写了四个查询,但现在我需要将它们放在一起,就好像它是一个返回单个结果的单个调用一样。我该怎么做?
1)我根据分店选择购买
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) 最后我根据客户id返回一些字段
SELECT CD_PURCHASE, CD_PRODUCT, ID_CUSTOMER, DT_LAST_PURCHASE
FROM TB_PURCHASE_SALES WHERE ID_CUSTOMER = ?
【问题讨论】:
样本数据、期望的结果以及对您想要做什么的清晰解释都会有所帮助。 @GordonLinoff 我想做一个查询,提供一个记录列表,其中包括:购买代码、产品代码、客户 ID 和上次购买日期。要返回这个数据,我需要考虑一些事情:只购买分店和商店发布的购买(第一步),只购买促销期范围在当前日期内的购买(第二步),只购买有活动产品的购买(第三步),仅由到达申请的客户进行的购买(第四步) 【参考方案1】:您是否尝试过以下查询?我假设你想要所有表的 INNER JOIN,CD_PURCHASE 是所有表中的公共链接,CD_PRODUCT 是 TB_PURCHASE_PRODUCT 和 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 = ?
【讨论】:
以上是关于如何将 4 个 sql 查询组合成一个性能良好的查询?的主要内容,如果未能解决你的问题,请参考以下文章