クエリは前の10,000レコードに対して機能しましたが、現在のクエリでは機能しません。あなたのクエリに奇妙に見えるのは、ON
句の3番目の行で、フィールド(studentID
)とそれ自身を比較します。
On fm_stg.classByStudent_termData_assessmentData.class_code = termData.course
and fm_stg.classByStudent_termData_assessmentData.termID = termData.termID
and fm_stg.classByStudent_termData_assessmentData.studentID = fm_stg.classByStudent_termData_assessmentData.studentID
私はちょうどここに推測しますが、このラインとして、ON
句のであるあなたも、学生のIDを比較したかったのですか?だから、あなたはクエリが今まで働いていて、学生IDにつまずいてしまったのが幸運なことかもしれません。私はON
句は次のようになりますと仮定:ところで
On fm_stg.classByStudent_termData_assessmentData.class_code = termData.course
and fm_stg.classByStudent_termData_assessmentData.termID = termData.termID
and fm_stg.classByStudent_termData_assessmentData.studentID = termData.studentID
、クエリは表の別名を使用して、より読みやすい取得します。次のクエリでは、私はfm_stg.classByStudent_termData_assessmentData
とtermData
ためtd
ためad
を使用します。
Insert into cet_database.dbo.termData
(
termID,
studentID,
course,
[current],
program,
StbyCurrentClassID,
class,
classCode,
cancelled
)
Select
ad.termID,
ad.studentID,
ad.class_code,
case when ad.[current] = 'Yes' then 1 else 0 end,
ad.program,
ad.classByStudentID,
ad.class,
ad.classID,
case when ad.cancelled_flag = 1 then 1 else 0 end
From fm_stg.classByStudent_termData_assessmentData ad
Left Outer Join termData td On ad.class_code = td.course
And ad.termID = td.termID
And ad.studentID = td.studentID
Where td.StbyCurrentClassID is null;
有無をチェックするときにまた、なぜあなたは抗参加トリックを使うのですか?あなたはまっすぐに問題があったNOT EXISTS
?本当に必要なときにのみトリックを使用してください。あなたも発生していることができなかったようなタイプミスして相関していないが、SQL Serverが機能しませんされて、あなたもNOT IN
を使用している可能性が他のDBMS(すなわちWhere (class_code, termId, studenId) Not In (Select ...)
)で
Insert into cet_database.dbo.termData
(
termID,
studentID,
course,
[current],
program,
StbyCurrentClassID,
class,
classCode,
cancelled
)
Select
termID,
studentID,
class_code,
case when [current] = 'Yes' then 1 else 0 end,
program,
classByStudentID,
class,
classID,
case when cancelled_flag = 1 then 1 else 0 end
From fm_stg.classByStudent_termData_assessmentData ad
Where Not Exists
(
Select *
From termData td
Where ad.class_code = td.course
And ad.termID = td.termID
And ad.studentID = td.studentID
);
を次のようにクエリが良く読み込み残念ながらIN
句のタプル。
レコードを取得できない唯一の理由は、WHERE句でなければなりません。それを削除し、変更された選択クエリを実行して、予期せず取得した内容を確認します。 –
問題を再現するSQL Fiddleを作成できますか?私は質問に何か間違っているとは思わない。 –
@TabAlleman SQL Fiddleでこれを作成しようとしましたが、これは私の人生にとっては何もできません。テーブルを作成します。編集:それはFirefoxで動作するようではない...デモを作成します。 – Ben