我正在尝试找到此查询的替代方法,其中不存在子选择但仅存在连接(左,右,内等)。
select count(SC.NUMBER_C)
from FNQP2PORTAL.SA.SEC_CAS SC
where SC.NUMBER_C not in (
select E.Reference from
FNQP2HQ.dbo.Entities E
join FNQP2HQ.dbo.Classes C on C.ID = E.ClassID
where C.Reference = 'Assembly case')
所以,它应该是......
select count(SC.NUMBER_C)
from FNQP2PORTAL.SA.SEC_CAS SC
left join FNQP2HQ.dbo.Entities E on E.Reference = SC.NUMBER_C and E.Reference IS NULL
inner join FNQP2HQ.dbo.Classes C on C.ID = E.ClassID and C.Reference = 'Assembly case'
有人可以帮助我吗?
答案 0 :(得分:1)
您发布的查询非常不同。一个是包容性的(其中SC.NUMBER_C IN .... - 另一个是独占的(左外连接,其中E.Reference是NULL)。由于这些完全不同的查询,不清楚你想要做什么。
这是使用连接而不是子查询完成第一个查询的方法。
SELECT COUNT(SC.NUMBER_C)
FROM FNQP2PORTAL.SA.SEC_CAS SC
JOIN FNQP2HQ.dbo.Entities E
ON SC.NUMBER_C = E.Reference
JOIN FNQP2HQ.dbo.Classes C
ON C.ID = E.ClassID
WHERE C.Reference = 'Assembly Case'
编辑:
您需要使用子查询和NOT IN
来获取评论中要求的内容。您不仅可以使用连接。
SELECT COUNT(SC.NUMBER_C)
FROM FNQP2PORTAL.SA.SEC_CAS SC
WHERE SC.NUMBER_C NOT IN
(
SELECT E.Reference
FROM FNQP2HQ.dbo.Entities E
JOIN FNQP2HQ.dbo.Classes C
ON C.ID = E.ClassID
WHERE C.Reference = 'Assembly Case'
)
答案 1 :(得分:0)
select count(SC.NUMBER_C)
from FNQP2PORTAL.SA.SEC_CAS SC
INNER JOIN FNQP2HQ.dbo.Entities E on SC.NUMBER_C = E.Reference
INNER JOIN FNQP2HQ.dbo.Classes C on C.ID = E.ClassID
where C.Reference = 'Assembly case'
答案 2 :(得分:0)
尝试下面的代码,它可能会抛出错误,因为您还没有与我们共享示例数据。但是你应该使用exists子句。
if (buffer[i] <'A')
{
buffer[i] = (char)(buffer[i] + 26);
}
答案 3 :(得分:0)
人们使用WHERE IN逻辑的一个原因是因为通过join返回重复。因此,在这种情况下,将逻辑移动到内部联接可能会导致计数膨胀。以下是解决这个问题的方法:
select count(SC.NUMBER_C)
from FNQP2PORTAL.SA.SEC_CAS SC
inner join
(
select distinct E.Reference
from FNQP2HQ.dbo.Entities E
join FNQP2HQ.dbo.Classes C on C.ID = E.ClassID
where C.Reference = 'Assembly case'
) as b
on b.reference = sc.NUMBER_C