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匹配,那么就不会有任何回报(这是我所期待的).
我究竟做错了什么?我正在学习,请解释你的答案.谢谢!
表之间的连接条件在哪里?
就目前而言,您有一个交叉连接又名笛卡尔积
...
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)
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |