这里我结合了两个表并得到了结果。
SELECT *
FROM dbo.LabSampleCollection
WHERE CONVERT(nvarchar(20), BillNo) + CONVERT(Nvarchar(20), ServiceCode)
NOT IN (SELECT CONVERT(nvarchar(20), BillNo) + CONVERT(Nvarchar(20), ServiceCode)
FROM dbo.LabResult)
问题是需要更多时间来执行。有没有其他办法可以解决这个问题。
答案 0 :(得分:4)
SELECT *
FROM dbo.LabSampleCollection sc
WHERE NOT EXISTS ( SELECT BillNo
FROM dbo.LabResult r
WHERE r.BillNo = sc.BillNo
AND r.ServiceCode = sc.Servicecode)
无需合并这两个字段,只需检查两个字段是否在同一记录中可用。将*替换为您想要检索的实际列也会更好。 (第二个选择状态中的选定列BillNo仅用于限制第二个查询的结果。
答案 1 :(得分:0)
您是否熟悉查询执行计划,如果没有,那么我强烈建议您阅读它们?如果您要编写查询和故障排除/尝试提高性能,他们是一个最有用的工具(以及对SQL Server优化引擎工作方式的基本了解)。
您可以通过活动监视器或通过运行查询本身(我们收入实际执行计划按钮或ctrl-M)从SSMS访问它们,它们将告诉您查询的哪个部分效率最低以及为什么。网上有很多关于如何使用这个有价值的工具提高性能的非常好的文章,例如: https://www.simple-talk.com/sql/performance/execution-plan-basics/