我有一个表,其中包含与这些部分关联的 PartIds 和 AccountIds 列表。在该表中,有一个布尔值用于确定 PartId/AccountId 配对是否是专属俱乐部 (IsInExclusiveClub) 的成员。
我想查询该表以查找属于专属俱乐部和不属于专属俱乐部的不同 PartId/AccountId 配对。
以下是我为此编写的两个 SQL 查询:
加入专属俱乐部:
DECLARE @ForeignPassedInKey int; set @ForeignPassedInKey = [Some Integer]
SELECT DISTINCT p.PartId
FROM dbo.Part p
WHERE IsInExclusiveClub = 1
AND EXISTS(SELECT * FROM dbo.Parts p2
WHERE p.partid = p2.partid
AND p2.Account IN (SELECT AccountId FROM dbo.Accounts
WHERE ForeignPassedInKey = @ForeignPassedInKey)
AND p2.IsInExclusiveClub = 1)
被排除在专属俱乐部之外:
DECLARE @ForeignPassedInKey int; set @ForeignPassedInKey = [Some Integer]
SELECT DISTINCT p.PartId
FROM dbo.Part p
WHERE IsInExclusiveClub = 1
AND NOT EXISTS(SELECT * FROM dbo.Parts p2
WHERE p.partid = p2.partid
AND p2.Account IN (SELECT AccountId FROM dbo.Accounts
WHERE ForeignPassedInKey = @ForeignPassedInKey)
AND p2.IsInExclusiveClub = 1)
我将如何使用 Linq to Entities 编写它。另外,如果您需要更多信息,请告诉我。
这样做可以简化您的查询:
SELECT DISTINCT p.PartId
FROM dbo.Part p
WHERE IsInExclusiveClub = 1
AND Account IN (SELECT AccountId FROM dbo.Accounts WHERE ForeignPassedInKey = @ForeignPassedInKey)
对于 NOT EXISTS 查询,您可以将其更改为“Account NOT IN”。
对此的 Linq 查询可能如下所示:
var accounts = db.Accounts
.Where(account => account.ForeignPassedInKey = ForeignPassedInKey)
.Select(account => account.AccountId);
var parts = db.Parts
.Where(part => part.IsInExclusiveClub = 1 && accounts.Contains(part.AccountId))
.Select(part => partId).Distinct();
然后 !accounts.Contains(part.AccountID) 对于 NOT EXISTS
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句