Я очень плохо знаком со сценариями и 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
Проблема в том, что он возвращает все строки в моей базе данных (за исключением записей, которые не соответствуют условиям NOT NULL и CATEGORY = 'Active', кажется), даже если долженбыть только одна строка, которая имеет правильный TBL_CONTACT.BIRTHDATE.Он помещает BIRTHDATE единственной строки, которая должна обрабатывать весь список, даже если эти строки должны иметь BIRTHDATE, которые не являются сегодняшней датой.Если я сделаю так, чтобы не было ДНЕЙ РОЖДЕНИЯ, которые соответствуют сегодняшнему дню, ничего не будет возвращено (что я и ожидаю).
Что я делаю не так?Пожалуйста, объясните ваш ответ, так как я хочу учиться.Спасибо!