1

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

クエリはエラーなしで実行および終了しますが、結果を見ると、データが一致しないレコードのコピーがあります。つまり、クエリ結果で異なるレコードが正しく結合されていないようです。

質問: 構文に問題があり、データが一致しませんか?

ここにいくつかのサンプル出力があります(実際と予想)

1 行が正しい: 103694-68-4 10.0000 % NOE マウス皮膚 Symrise,2002c 局所リンパ節アッセイ 研究の条件下では、試験物質が皮膚感作物質である可能性は低い。49523 45957

しかし、取得した 2 行目では、同じ Study_Results.CASNumber を別の Study_Results.CASNumber のデータに適用しています。

103694-68-4 10.0000 % NOE マウス皮膚 Symrise,2002c 局所リンパ節アッセイ アセトン中 1%、3%、および 10% w/v の濃度で試験物質を適用すると、同位体の取り込みが 3 倍以上増加しました3% および 10% w/v 濃度で。したがって、試験物質は皮膚感作物質であることが示され、研究に使用されたプロトコルの有効性が確認されました。49523 45957

上記のデータは、実際には別の CASNumber に適用されます。

4

2 に答える 2

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 の後に a を追加してそれらを削除できます。

すなわち:

 select distinct Study_Results.CASNumber, ...
于 2012-08-31T13:33:47.157 に答える
0

重複の理由は、テーブルに一致する複数のレコードがあるためです。これらの倍数は、次の場所の 1 つまたは両方で発生しています。

  • Studies と ToxDataReferences の間の場所
  • Studies と Studies_Results の間の Protocol_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

おそらく、一意性のないテーブルで一意性を期待しています。結合条件が不足している可能性があります。おそらく、データはあなたが理解しているものとは少し異なります。

于 2012-08-31T13:39:18.877 に答える