我正在使用以下语法进行SQL SELECT查询以从多个表中提取数据(使用Sequel Pro):
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, Studies, ToxData_References
where Study_Results.ProtocolID = Studies.ProtocolID
AND Studies.Location = ToxData_References.Location
AND Studies.Study = "Local Lymph Node Assay"
order by Study_Results.CASNumber
查询运行并完成而没有错误,但是当我查看结果时,存在数据不匹配的记录副本 - 即,似乎不同的记录在查询结果中被错误地组合。
问题:我的语法是否有问题导致数据不匹配?
这是一些示例输出(实际和预期)
一行是正确的: 10.00%NOE小鼠皮肤Symrise,2002c局部淋巴结测定在研究条件下,测试材料不太可能是皮肤致敏物。 49523 45957
但我得到的第二行将相同的Study_Results.CASNumber应用于来自不同Study_Results.CASNumber的数据:
10.00%NOE小鼠皮肤Symrise,2002c局部淋巴结测定在丙酮中以1%,3%和10%w / v的浓度应用测试材料导致大于3倍的增加同位素掺入浓度为3%和10%w / v时。因此,测试材料显示为皮肤致敏物,证实了用于该研究的方案的有效性。 49523 45957以上数据实际上适用于不同的CASNumber。
答案 0 :(得分:2)
人们普遍认为现代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
来删除它们。
即:
select distinct Study_Results.CASNumber, ...
答案 1 :(得分:0)
重复的原因是您在表中有多个匹配的记录。这些倍数出现在这些地方的一个或两个地方:
如果每个表都有唯一的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
您可能期望在没有唯一性的表中具有唯一性。也许你错过了一个连接条件。也许数据与您的理解有点不同。