我们假设我有一个表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的这些产品?
此致 米甲
答案 0 :(得分:0)
我认为您正在寻找的是使用GROUP BY
和HAVING
条款。
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对它们执行汇总计数。只有具有与您正在寻找的相同属性相匹配的计数的那些,才能满足搜索要求。