如何用SQL查询获取无attribute_id=5的magento_customerbalance客户ID
解决方案:找出magento_customerbalance中无对应attribute_id=5的customer_id
可以通过以下几种SQL查询方式获取目标21条customer_id记录:
方法1:使用NOT EXISTS(推荐,性能更优)
直接检查每个mcb的customer_id在cev中是否不存在attribute_id=5的匹配记录:
SELECT mcb.customer_id FROM magento_customerbalance mcb WHERE NOT EXISTS ( SELECT 1 FROM customer_entity_varchar cev WHERE cev.entity_id = mcb.customer_id AND cev.attribute_id = 5 );
方法2:使用LEFT JOIN + IS NULL
通过左连接保留mcb的所有记录,筛选出cev侧无attribute_id=5匹配的行:
SELECT mcb.customer_id FROM magento_customerbalance mcb LEFT JOIN customer_entity_varchar cev ON cev.entity_id = mcb.customer_id AND cev.attribute_id = 5 WHERE cev.entity_id IS NULL;
方法3:使用NOT IN
注意:如果customer_entity_varchar的entity_id存在NULL值,此方法会返回空结果,需确保数据无此类情况:
SELECT mcb.customer_id FROM magento_customerbalance mcb WHERE mcb.customer_id NOT IN ( SELECT cev.entity_id FROM customer_entity_varchar cev WHERE cev.attribute_id = 5 );
补充说明
- 若要提升查询效率,建议给
customer_entity_varchar表创建entity_id + attribute_id的复合索引,数据库能快速定位匹配记录。 - 三种方法均能得到需要的21条customer_id记录,优先推荐前两种,逻辑清晰且性能稳定。
内容的提问来源于stack exchange,提问作者Prikshit
相关产品推荐
相关产品推荐

