两个查询返回不同的结果计数
two queries returning different result counts
我测试了两个查询:
SELECT [FirstName], [LastName], [PreferredName], [DOB], [Sex], LastActivityDate,LoweredEmail, EmailConfirmed FROM [Patients] p
join AspNetUsers u on p.Id=u.PatientId
join AspNetUserRoles r on u.Id=r.UserId
WHERE (p.[ClinicId] = 1) and RoleId='16874754-779a-fbae-8caf-bbbb2344b7a6'
它 returns 1301 个结果
但是这个查询
SELECT AspNetUsers.id FROM dbo.AspNetUsers
INNER JOIN dbo.AspNetUserRoles ON AspNetUsers.Id=AspNetUserRoles.UserId
WHERE AspNetUsers.ClinicId = 1 and AspNetUserRoles.RoleID='16874754-779a-fbae-8caf-bbbb2344b7a6'
这个returns1303
我试过这个查询来检查丢失的结果,结果为零
SELECT [FirstName], [LastName], [PreferredName], [DOB], [Sex], LastActivityDate,LoweredEmail, EmailConfirmed FROM [Patients] p
join AspNetUsers u on p.Id=u.PatientId
join AspNetUserRoles r on u.Id=r.UserId
WHERE (p.[ClinicId] = 1) and RoleId='16874754-779a-fbae-8caf-bbbb2344b7a6'
and u.PatientId not in
(
SELECT AspNetUsers.PatientId FROM dbo.AspNetUsers INNER JOIN
dbo.AspNetUserRoles ON AspNetUsers.Id=AspNetUserRoles.UserId WHERE
AspNetUsers.ClinicId = 1 and
AspNetUserRoles.RoleID='16874754-779a-fbae-8caf-bbbb2344b7a6'
)
我如何找出哪个是正确的,为什么我会有所不同?
第二个查询返回 1303 条记录:
SELECT AspNetUsers.id
FROM dbo.AspNetUsers INNER JOIN
dbo.AspNetUserRoles
ON AspNetUsers.Id = AspNetUserRoles.UserId
WHERE AspNetUsers.ClinicId = 1 and
AspNetUserRoles.RoleID='16874754-779a-fbae-8caf-bbbb2344b7a6'
第一个查询返回 1301 条记录:
SELECT [FirstName], [LastName], [PreferredName], [DOB], [Sex],
LastActivityDate, LoweredEmail, EmailConfirmed
FROM [Patients] p join
AspNetUsers u
on p.Id = u.PatientId join
AspNetUserRoles r
on u.Id = r.UserId
WHERE (p.[ClinicId] = 1) and RoleId='16874754-779a-fbae-8caf-bbbb2344b7a6'
这两者的区别在于 Patients
上的连接。这是一个 inner join
,所以它可能是过滤结果。请注意,重复项也可能导致问题。
您可以使用以下方法确定缺失的行(因为有些缺失):
select *
from AspNetUsers nu
where not exists (select 1 from patents p where p.id = nu.PatientId);
您尝试过 SELECT DISTINCT 吗?
也可以用另一种方式尝试检查查询(子查询到主查询,主查询到子查询)
您在第二个查询中得到了重复项。第一个使用 patient
中的 clinicid
,而第二个使用 aspusers
table 中的 clinicid
。嫌疑人是 aspusers
table 的 clinicid
。检查它与 patient
中的相同。从 patient
中求差 aspusers
我测试了两个查询:
SELECT [FirstName], [LastName], [PreferredName], [DOB], [Sex], LastActivityDate,LoweredEmail, EmailConfirmed FROM [Patients] p
join AspNetUsers u on p.Id=u.PatientId
join AspNetUserRoles r on u.Id=r.UserId
WHERE (p.[ClinicId] = 1) and RoleId='16874754-779a-fbae-8caf-bbbb2344b7a6'
它 returns 1301 个结果
但是这个查询
SELECT AspNetUsers.id FROM dbo.AspNetUsers
INNER JOIN dbo.AspNetUserRoles ON AspNetUsers.Id=AspNetUserRoles.UserId
WHERE AspNetUsers.ClinicId = 1 and AspNetUserRoles.RoleID='16874754-779a-fbae-8caf-bbbb2344b7a6'
这个returns1303
我试过这个查询来检查丢失的结果,结果为零
SELECT [FirstName], [LastName], [PreferredName], [DOB], [Sex], LastActivityDate,LoweredEmail, EmailConfirmed FROM [Patients] p
join AspNetUsers u on p.Id=u.PatientId
join AspNetUserRoles r on u.Id=r.UserId
WHERE (p.[ClinicId] = 1) and RoleId='16874754-779a-fbae-8caf-bbbb2344b7a6'
and u.PatientId not in
(
SELECT AspNetUsers.PatientId FROM dbo.AspNetUsers INNER JOIN
dbo.AspNetUserRoles ON AspNetUsers.Id=AspNetUserRoles.UserId WHERE
AspNetUsers.ClinicId = 1 and
AspNetUserRoles.RoleID='16874754-779a-fbae-8caf-bbbb2344b7a6'
)
我如何找出哪个是正确的,为什么我会有所不同?
第二个查询返回 1303 条记录:
SELECT AspNetUsers.id
FROM dbo.AspNetUsers INNER JOIN
dbo.AspNetUserRoles
ON AspNetUsers.Id = AspNetUserRoles.UserId
WHERE AspNetUsers.ClinicId = 1 and
AspNetUserRoles.RoleID='16874754-779a-fbae-8caf-bbbb2344b7a6'
第一个查询返回 1301 条记录:
SELECT [FirstName], [LastName], [PreferredName], [DOB], [Sex],
LastActivityDate, LoweredEmail, EmailConfirmed
FROM [Patients] p join
AspNetUsers u
on p.Id = u.PatientId join
AspNetUserRoles r
on u.Id = r.UserId
WHERE (p.[ClinicId] = 1) and RoleId='16874754-779a-fbae-8caf-bbbb2344b7a6'
这两者的区别在于 Patients
上的连接。这是一个 inner join
,所以它可能是过滤结果。请注意,重复项也可能导致问题。
您可以使用以下方法确定缺失的行(因为有些缺失):
select *
from AspNetUsers nu
where not exists (select 1 from patents p where p.id = nu.PatientId);
您尝试过 SELECT DISTINCT 吗? 也可以用另一种方式尝试检查查询(子查询到主查询,主查询到子查询)
您在第二个查询中得到了重复项。第一个使用 patient
中的 clinicid
,而第二个使用 aspusers
table 中的 clinicid
。嫌疑人是 aspusers
table 的 clinicid
。检查它与 patient
中的相同。从 patient
aspusers