在我的表中,我想找出productid是否存在于表中。 实际上,文本代码在where条件中作为参数传递。
create table productdetails(productid nvarchar(22),textcode varchar(50),textmessage varchar(50))
INSERT INTO productdetails VALUES('T0001','M0001','ONE')
INSERT INTO productdetails VALUES('T0001','M0002','TWO')
INSERT INTO productdetails VALUES('T0009','M0006','THREE')
INSERT INTO productdetails VALUES('T0002','M0001','FIVE')
如果我给textcode ='M0001'的条件是给了productid ='T0001'和'T0002',我想检查这个productid'T0001'和'T0002'是否在表中再存在一次。
我在下面使用查询。它是优化查询还是其他方法来检查这种情况。
SELECT COUNT(PRODUCTID),PRODUCTID FROM productdetails WHERE productid in(SELECT PRODUCTID FROM productdetails WHERE TEXTCODE='M0001')
GROUP BY PRODUCTID HAVING COUNT(*)>1
答案 0 :(得分:1)
您可以在having
子句中使用条件聚合来简化查询:
SELECT COUNT(*), PRODUCTID
FROM productdetails
GROUP BY PRODUCTID
HAVING COUNT(CASE WHEN TEXTCODE='M0001' THEN 1 END) > 0
AND COUNT(*) > 1
此查询应该为您提供更好的性能,因为您只访问一次表。
请注意,为获得最佳性能,两个查询都可能会受益于相同的索引-TextCode和ProductId的索引(按此顺序!)应有助于两个查询的性能。