-1

我有 3 个表,即联系人、DisCon 和 RecMast。我使用以下 Sql,但处理速度非常慢。我想检查 Left Join-Is Null 方法是否会做得更好?如果是这样,请帮助我编写 SQL。

这是我的慢 SQL::

vSql2 = "Select Count(CusID) as Cnt2  from Contacts where StaffID = " & gSTaffID & " and  " _
& " CusID NOT IN (Select CusID from DISCON where StaffID = " & gSTaffID & ") and  " _
& " CusID NOT IN (Select CusID from RECMAST where StaffID = " & gSTaffID & ")"
4

2 回答 2

1

你的意思是做这样的事情吗?

SELECT
        COUNT(Contacts.CusID) AS Cnt2
    FROM Contacts
    LEFT JOIN DISCON ON gSTaffID = DISCON.StaffID
    LEFT JOIN RECMAST ON gSTaffID = DISCON.StaffID
    WHERE
        Contacts.StaffID = gSTaffID
        AND DISCON.StaffID IS NULL
        AND RECMAST.StaffID IS NULL

请注意,当然,您必须重新添加连接逻辑(但请记住可能存在 sql 注入漏洞并考虑使用prepared statements或类似的东西。)

我只是gSTaffID在此处输入该查询以提高可读性。

于 2013-10-10T08:44:10.567 回答
0

如果您使用 SQL-server,您可以执行类似的操作

WITH ExcludedCustomers AS (
    SELECT CusID 
    FROM DISCON 
    WHERE StaffID = @StaffID
  UNION ALL
    SELECT CusID 
    FROM RECMAST 
    WHERE StaffID = @StaffID
)
SELECT COUNT(1)
FROM Contacts
     LEFT JOIN ExcludedCustomers
         ON Contacts.CusID = ExcludedCustomers.CusID
WHERE StaffID = @StaffID
      AND ExcludedCustomers.CUSId IS NULL

性能不应有所不同,因此请使用最易读的那个

于 2013-10-10T08:35:50.063 回答