SQL查询'where'不能正常工作

eul*_*ogy 0 sql sql-server-2005

我是脚本和SQL的新手,我继承了一些联系人管理软件生成的疯狂数据库.我正在运行Microsoft SQL Server 2005.我要做的是选择满足特定条件的行(最重要的是BIRTHDATE是今天的日期,这似乎可能是我的问题).这是我的代码:

SELECT 
  TBL_CONTACT.BIRTHDATE, 
  TBL_CONTACT.COMPANYNAME, 
  TBL_CONTACT.CATEGORY, 
  CUST_ContactTable1_074000.CUST_DesignatedAgent_074203199, 
  TBL_EMAIL.ADDRESS 
FROM 
  TBL_CONTACT, 
  CUST_ContactTable1_074000,
  TBL_EMAIL
WHERE 
  TBL_CONTACT.BIRTHDATE >= DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0) AND 
  TBL_CONTACT.BIRTHDATE < DATEADD(day, DATEDIFF(day, 0, GETDATE()), 1) AND 
  TBL_CONTACT.CATEGORY = 'Active' AND TBL_EMAIL.ADDRESS IS NOT NULL AND 
  CUST_ContactTable1_074000.CUST_DesignatedAgent_074203199 IS NOT NULL
Run Code Online (Sandbox Code Playgroud)

问题是它返回了我的数据库中的所有行(减去不符合NOT NULL和CATEGORY ='Active'条件的记录,它出现了),即使只有一行具有正确的TBL_CONTACT.BIRTHDATE.它是唯一一行应该在整个列表中工作的BIRTHDATE,即使这些行应该是BIRTHDATE不是今天的日期.如果我这么做就没有今天的BIRTHDATE匹配,那么就不会有任何回报(这是我所期待的).

我究竟做错了什么?我正在学习,请解释你的答案.谢谢!

gbn*_*gbn 5

表之间的连接条件在哪里?
就目前而言,您有一个交叉连接又名笛卡尔积

...
FROM 
   TBL_CONTACT C
   JOIN
   CUST_ContactTable1_074000 CT ON C.Something = CT.Something
   JOIN
   TBL_EMAIL E ON C.Anotherthing = CT.Anotherthing
WHERE
   ...
Run Code Online (Sandbox Code Playgroud)