选择DISTINCT。请解释?

时间:2012-06-29 01:08:50

标签: sql distinct

想知道是否有人可以解释这两个查询之间的区别,并告知为什么一个有效,另一个没有。

这个有效。给我两个不同的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条记录)。

由于 格雷格

1 个答案:

答案 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值。