想知道是否有人可以解释这两个查询之间的区别,并告知为什么一个有效,另一个没有。
这个有效。给我两个不同的GantryRtn值及其对应的SSD值的记录。
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'
但 Field 表中有一个外键链接到另一个表的主键,该表包含每个字段的纯文本名称。我还想通过拉出这个外键 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'
第二个查询为我提供了7条带有非独特 GantryRtn 值的记录。
为什么会这样?
我已经使用GROUP BY进行了调查,但这会降低查询速度,并且似乎将所有GantryRtn拉出数据库(100条记录)。
由于 格雷格
答案 0 :(得分:3)
DISTINCT关键字适用于结果集(所有字段),而不仅仅适用于第一个字段。
在你的情况下:
SELECT DISTINCT GantryRtn as Gantry, ROUND(Field.SSD,1) as SSD, Field.RadiationSer
将与Gantry, SSD, and RadiationSer
因此,对于相同的Gantry
,您可能有7条记录,并且RadiationSer的值不同。
如果您希望先使用不同的Gantry
值进行过滤,则可以使用子查询和内部联接来完成此操作,但不知何故,您必须确定要使用的RadiationSer
值。