admin

T-SQL如何匹配多行

sql

有两个表,包装表和产品表。就我而言,包装中包含多种产品。我们需要识别多个产品是否可以匹配包装记录中已经存在的包装。下面是一些脚本。

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不是正确的包记录。创建多行查询子句并不容易。请有人可以有什么建议吗?谢谢。


阅读 182

收藏
2021-07-01

共1个答案

admin

试试这个。 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
2021-07-01