0

誰かがこれら 2 つのクエリの違いを説明し、一方が機能し、もう一方が機能しない理由を教えてください。

これは機能します。個別の GantryRtn 値とそれに対応する SSD 値の 2 つのレコードが表示されます。

SELECT DISTINCT GantryRtn as Gantry, ROUND(Field.SSD,1) as SSD
            FROM Field, PlanSetup, Course, Patient, Radiation
                    WHERE Field.RadiationSer=Radiation.RadiationSer
                        AND Radiation.PlanSetupSer=PlanSetup.PlanSetupSer
                        AND PlanSetup.CourseSer=Course.CourseSer
                        AND Course.PatientSer=Patient.PatientSer
                        AND Patient.PatientId='ZZZ456'
                        AND PlanSetup.PlanSetupId='F T1 R CHEST'

ただし、フィールドテーブルには、各フィールドのプレーン テキスト名を含む別のテーブルの主キーにリンクする外部キーがあります。また、この外部キーRadiationSerを引き出して、その名前を (必要に応じて別のクエリで) 抽出したいと思います。しかし、 RadiationSerをクエリに入れるとすぐに、DISTINCT の結果が失われます。

SELECT DISTINCT GantryRtn as Gantry, ROUND(Field.SSD,1) as SSD, Field.RadiationSer
            FROM Field, PlanSetup, Course, Patient, Radiation
                    WHERE Field.RadiationSer=Radiation.RadiationSer
                        AND Radiation.PlanSetupSer=PlanSetup.PlanSetupSer
                        AND PlanSetup.CourseSer=Course.CourseSer
                        AND Course.PatientSer=Patient.PatientSer
                        AND Patient.PatientId='ZZZ456'
                        AND PlanSetup.PlanSetupId='F T1 R CHEST'

この 2 番目のクエリでは、 GantryRtn値が明確でない 7 つのレコードが得られます。

なぜこれが起こるのですか??

GROUP BY を使用して調査しましたが、これによりクエリが遅くなり、すべての GantryRtn がデータベース (数百のレコード) から引き出されたように見えます。

ありがとうグレッグ

4

1 に答える 1

3

DISTINCTキーワードは、最初のフィールドだけでなく、結果セット(すべてのフィールド)に適用されます。

あなたの場合:

SELECT DISTINCT GantryRtn as Gantry, ROUND(Field.SSD,1) as SSD, Field.RadiationSer

一緒に取られたときに異なる(同じではない)レコードを返しますGantry, SSD, and RadiationSer

Gantryしたがって、 RadiationSerの値が同じで異なる7つのレコードがある場合があります。

最初に個別の値でフィルタリングしたい場合はGantry、サブクエリと内部結合を使用してそれを実現できますが、どういうわけかRadiationSer、使用する値を決定する必要があります。

于 2012-06-29T01:14:24.513 に答える