SQL选择查询语法

SQL选择查询语法,sql,select,syntax,Sql,Select,Syntax,我使用以下语法进行SQL SELECT查询,以从多个表中提取数据(使用Sequel Pro): 查询运行并完成时没有出现错误,但当我查看结果时,发现有数据不匹配的记录副本——即,在查询结果中,不同的记录似乎被错误地组合在一起 问题:我的语法是否存在导致数据不匹配的错误 以下是一些示例输出(实际和预期) 一行是正确的: 103694-68-4 10.0000%NOE小鼠皮肤症状,2002c局部淋巴结测定在研究条件下,试验材料不太可能是皮肤敏感剂。4952345957 但我得到的第二行将相同的研究结

我使用以下语法进行SQL SELECT查询,以从多个表中提取数据(使用Sequel Pro):

查询运行并完成时没有出现错误,但当我查看结果时,发现有数据不匹配的记录副本——即,在查询结果中,不同的记录似乎被错误地组合在一起

问题:我的语法是否存在导致数据不匹配的错误

以下是一些示例输出(实际和预期)

一行是正确的: 103694-68-4 10.0000%NOE小鼠皮肤症状,2002c局部淋巴结测定在研究条件下,试验材料不太可能是皮肤敏感剂。4952345957

但我得到的第二行将相同的研究结果.CASNumber应用于来自不同研究结果.CASNumber的数据:

103694-68-4 10.0000%NOE小鼠皮肤症状,2002c局部淋巴结分析在丙酮中1%、3%和10%w/v浓度下应用试验材料导致在3%和10%w/v浓度下同位素掺入增加超过3倍。因此,试验材料被证明是皮肤敏感剂,证实了研究所用方案的有效性。4952345957


上述数据实际上适用于不同的CASNumber。

人们普遍认为现代ANSI语法更好

select Study_Results.CASNumber, Study_Results.Dose, Study_Results.Units, Study_Results.Effects, Studies.Species, Studies.Route, Studies.Result, ToxData_References.BriefReference, Studies.Study, Studies.Summary 
from Study_Results
    inner join Studies on Study_Results.ProtocolID = Studies.ProtocolID 
    inner join ToxData_References on Studies.Location = ToxData_References.Location 
where Studies.Study = "Local Lymph Node Assay" 
order by Study_Results.CASNumber 
如果您发现重复项有效,根据您的数据,您可以通过在选择后添加一个
distinct
来删除它们

即:


重复的原因是表中有多条匹配的记录。这些倍数发生在一个或两个地方:

  • 位置,研究和参考数据之间
  • 研究和研究结果之间的方案id
如果每个表都有一个唯一的id,您可以通过计算出现次数了解发生了什么:

select Study_Results.CASNumber,
       count(distinct sr.StudyResultsId),
       count(distinct s.ProtocolId),
       count(distinct tdr.ToxDataReferencesId)
from Study_Results sr inner join
     Studies s
     on sr.ProtocolID = s.ProtocolID inner join
        ToxData_References tdr
     on s.Location = tdr.Location

您可能希望在没有唯一性的表中具有唯一性。可能缺少联接条件。可能数据与您对它的理解有点不同。

很难说。您会为这三个表添加示例数据、您正在获得的输出示例和您期望的输出示例吗?这三个表的定义也会有所帮助。您可能没有使用正确的(或总体上)外键/主键。我认为他仍然从
Study\u结果
ToxData\u引用中得到交叉连接,因为
WHERE
条款中没有定义这种关系!下面是一些示例数据。查询似乎为每个预期/正确的记录返回了一个“额外”的不正确记录。哇哦,我尝试添加太多字符--我可以附加一个文本文件来显示示例输出吗?谢谢!我刚刚发布的示例输出没有以看起来有用的方式发布。我可以附上一个文本文件供您审阅吗?这非常有用。错误显示的变量是Study_Results.CASNumber。查询结果提供的输出与研究结果正确匹配。在一种情况下,不正确的副本会提供不同的数据,但会将其连接到不正确的研究结果。CASNumberFixed!原来我错过了最重要的加入条件:AND Studies.CASNumber=Study\u Results.CASNumber谢谢你的帮助!谢谢事实证明,副本无效。“重复”记录被错误地拉入,并且与另一个唯一ID关联。已修复它!原来我错过了最重要的加入条件:AND Studies.CASNumber=Study\u Results.CASNumber谢谢你的帮助!
 select distinct Study_Results.CASNumber, ...
select Study_Results.CASNumber,
       count(distinct sr.StudyResultsId),
       count(distinct s.ProtocolId),
       count(distinct tdr.ToxDataReferencesId)
from Study_Results sr inner join
     Studies s
     on sr.ProtocolID = s.ProtocolID inner join
        ToxData_References tdr
     on s.Location = tdr.Location