0

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

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

但是,字段表中有一个外键链接到另一个表的主键,该表包含每个字段的纯文本名称。我还想通过提取此外键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 条记录)。

谢谢格雷格

4

1 回答 1

3

DISTINCT 关键字适用于结果集(所有字段),而不仅仅是第一个字段。

在你的情况下:

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

将返回任何不同(不相同)的记录与Gantry, SSD, and RadiationSer

因此,您可能有 7 条相同Gantry且具有不同 RadiationSer 值的记录。

如果您想首先按不同的Gantry值进行过滤,您可以使用子查询和内部连接来完成此操作,但您必须以某种方式确定RadiationSer要使用的值。

于 2012-06-29T01:14:24.513 回答