有两个表,包装表和产品表。就我而言,包装中包含多种产品。我们需要识别多个产品是否可以匹配包装记录中已经存在的包装。下面是一些脚本。
DECLARE @tblPackage TABLE( PackageID int, ProductID int ) INSERT INTO @tblPackage VALUES(436, 4313) INSERT INTO @tblPackage VALUES(436, 4305) INSERT INTO @tblPackage VALUES(436, 4986) INSERT INTO @tblPackage VALUES(437, 4313) INSERT INTO @tblPackage VALUES(437, 4305) INSERT INTO @tblPackage VALUES(442, 4313) INSERT INTO @tblPackage VALUES(442, 4335) INSERT INTO @tblPackage VALUES(445, 4305) INSERT INTO @tblPackage VALUES(445, 4335) DECLARE @tblProduct TABLE( ProductID int ) INSERT INTO @tblProduct VALUES(4305) INSERT INTO @tblProduct VALUES(4313)
我们有两个产品4305和4313,然后我需要检索匹配的包记录437。只有完全匹配的包记录才可以返回,因此包436不是正确的包记录。创建多行查询子句并不容易。请有人可以有什么建议吗?谢谢。
试试这个。 SQLFIDDLE演示
Declare @cnt Int Select @cnt = count(distinct ProductID) from tblProduct SELECT B.packageid FROM (SELECT packageid FROM tblpackage GROUP BY packageid HAVING Count(productid) = @cnt) A JOIN tblpackage B ON a.packageid = b.packageid WHERE EXISTS (SELECT 1 FROM tblproduct c WHERE c.productid = b.productid) GROUP BY B.packageid HAVING Count(DISTINCT B.productid) = @cnt