2012-01-10 17 views
0

私はスクリプト作成とSQLの新機能で、一部の連絡先管理ソフトウェアによって生成された狂ったデータベースを継承しました。私はMicrosoft SQL Server 2005を実行しています。私がしようとしているのは、特定の条件を満たす行を選択することです(BIRTHDATEは今日の日付ですが、これは私の問題のようです)。ここに私のコードは次のとおりです。SQLクエリ 'where'が期待どおりに動作しない

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 

問題だけがあるはずにもかかわらず(マイナスレコードは=「アクティブ」の条件NULLとCATEGORY、NOTを満たしていない、それが表示されます)、それは私のデータベース内のすべての行を返すということです1つの行に正しいTBL_CONTACT.BIRTHDATEがあります。これらの行に今日の日付ではないBIRTHDATEがあるはずですが、リスト全体を処理する唯一の行のBIRTHDATEを入れています。私がそれを今日のものと一致する誕生日がないようにすると、何も返されません(これは私が期待するものです)。

私は間違っていますか?私が学んでいるように答えを説明してください。ありがとうございました!

+1

フォーマットを持っており、適切にクエリーをインデント。 – Lion

答えて

5

テーブル間の結合条件はどこですか?現状では
は、あなたがcross join a.k.a Cartesian product

... 
FROM 
    TBL_CONTACT C 
    JOIN 
    CUST_ContactTable1_074000 CT ON C.Something = CT.Something 
    JOIN 
    TBL_EMAIL E ON C.Anotherthing = CT.Anotherthing 
WHERE 
    ... 
+0

あなたは基本的に共通の一意の識別子に基づいて異なるテーブルをリンクすることを提案していますか?申し訳ありませんが、私は信じられないほどこのことに新しいです。 「何か」と「別のもの」の代わりに何を入れる必要がありますか?私はそれが異なるテーブル間で同じレコードであると言うのに使うことができるものは何ですか?キー? – eulogy

+0

はい、これはJOINのポイントです。あなたが新しい人なら、基本的な研究やトレーニングもお勧めします – gbn

+0

ありがとう、男。私はそれが働くようになった!私はたぶん6時間前に始めました。文法の概念さえもほとんど理解していませんでした。私は学校教育に余裕がありません。私は壁に突っ込み、頼むことなく私がする必要があるものを見つけることができませんでした。私は頭の中で最初にダイビングすることによって最高のことを学びますが、しばらくしては方向性が必要です。慎重ではないことありがとうございます。 – eulogy

関連する問題