PostgreSQL - 查询优化或需要多个循环

时间:2014-12-29 21:13:02

标签: mysql postgresql

我们假设我有一个表LCT_PRD_PROPERTIES,用于保存分配给每个产品的属性。每个产品可以分配多个属性。

LCT_PRD_PROPERTIES表和示例数据的结构:

PRS_ID;PRS_PRD_ID;PRS_PPS_ID
99;39;41;
106;41;41;
100;39;42;
103;40;42;

其中PRS_PRD_ID是产品ID的外键 和属性ID的外键PRS_PPS_ID

案例:我想仅收到分配了41和42 PPS_ID的产品的PRD_ID。

有没有比在第一个循环中选择分配了PPS_ID = 41的所有PRD_ID更好的方法,并且在第二个循环中,从第一个循环获取结果并搜索也分配了PPS_ID = 42的这些产品?

此致 米甲

1 个答案:

答案 0 :(得分:0)

我认为您正在寻找的是使用GROUP BYHAVING条款。

SELECT
    PRS_PRD_ID,
    count(PRS_PPS_ID) AS prop_count
FROM LCT_PRD_PROPERTIES
WHERE PRD_PPS_ID IN (?, ?, ...) /* <-- the properties you are searching for here */
GROUP BY PRS_PRD_ID
HAVING prop_count = ? /* value here equals number of properties being searched for */

您所做的是查询具有匹配的属性ID的所有条目,然后按产品ID对它们执行汇总计数。只有具有与您正在寻找的相同属性相匹配的计数的那些,才能满足搜索要求。