2017-10-16 14 views
0

複数のテーブルを1つのスクリプトにまとめたいと思っています。これを行うには、INNER JOINを使用する必要があり、これは私を混乱させることです。複数テーブルのSQLiteスクリプトSELECT

"SELECT UserSpecies.commonName, UserSpecies.commonNameFR, UserSpecies.commonNameES, UserSpecies.commonNameDE, UserSpecies.speciesName, UserSpecies.speciesRegion, UserSpecies.speciesDetails, UserSpecies.maxSize, UserSpecies.creditSource, UserSpecies.UserCreated, UserSpecies.genusUC, UserSpecies.familyUC, UserSpecies.orderUC, UserSpecies.groupUC, UserSpecies.subGroupUC, UserSpecies.authority, Genus.name, Family.name, Orders.name, Groups.name, SubGroups.name, Types.name, IUCN.name 
FROM UserSpecies 
INNER JOIN Genus ON UserSpecies.genusKey = Genus.id 
INNER JOIN Family ON UserSpecies.familyKey = Family.id 
INNER JOIN Orders ON UserSpecies.orderKey = Orders.id 
INNER JOIN Groups ON UserSpecies.groupKey = Groups.id 
INNER JOIN SubGroups ON UserSpecies.subGroupKey = SubGroups.id 
INNER JOIN Types ON UserSpecies.typeKey = Types.id 
INNER JOIN IUCN ON UserSpecies.iucnKey = IUCN.id 
WHERE UserSpecies.id = %d" 

上記を実行すると、エラーは発生しませんが、データを取得しないだけです。

注:すべての表と列は正しいです。

私には何が欠けていますか?

+0

これはPythonから使用しますか?特定のIDを持つsqliteコンソールでそれをやろうとします。 –

+0

サンプルデータと必要な出力を入力してください。 (いくつか追加する方法については[ スタックオーバーフローでSQLテーブルをフォーマットする方法?](https://meta.stackexchange.com/q/96125)を参照してください) –

答えて

1

データベースに情報がない可能性があります。

「内部結合」文は、結合された表に1つ(またはそれ以上)の一致がある場合にのみデータを検索します。

あなたのケースでは、一部のデータが結合されたテーブルの一つに(家族、など...)不足している場合、あなたがどんな結果を得ることはありませんを意味します。 たとえば、ファミリとid = UserSpecies.familyKey(ファミリテーブル)がない場合、データは取得されません。

「内部結合」の代わりに「左結合」を使用すると、一致するものがなくても結果が返されます。この場合、対応する値はnullになります。ファミリが一致しない場合、Family.nameの値は "null"になります。この変更要求を使えば、簡単に(もしあれば)、欠落データを発見します:

"SELECT UserSpecies.commonName, UserSpecies.commonNameFR, UserSpecies.commonNameES, UserSpecies.commonNameDE, UserSpecies.speciesName, UserSpecies.speciesRegion, UserSpecies.speciesDetails, UserSpecies.maxSize, UserSpecies.creditSource, UserSpecies.UserCreated, UserSpecies.genusUC, UserSpecies.familyUC, UserSpecies.orderUC, UserSpecies.groupUC, UserSpecies.subGroupUC, UserSpecies.authority, Genus.name, Family.name, Orders.name, Groups.name, SubGroups.name, Types.name, IUCN.name 
FROM UserSpecies 
LEFT JOIN Genus ON UserSpecies.genusKey = Genus.id 
LEFT JOIN Family ON UserSpecies.familyKey = Family.id 
LEFT JOIN Orders ON UserSpecies.orderKey = Orders.id 
LEFT JOIN Groups ON UserSpecies.groupKey = Groups.id 
LEFT JOIN SubGroups ON UserSpecies.subGroupKey = SubGroups.id 
LEFT JOIN Types ON UserSpecies.typeKey = Types.id 
LEFT JOIN IUCN ON UserSpecies.iucnKey = IUCN.id 
WHERE UserSpecies.id = %d" 

あなたが「参加」のキーワードの異なる味の詳細をしたい場合は、こちらをご覧持つことができます。 What is the difference between "INNER JOIN" and "OUTER JOIN"?

注意:sqliteは、結合操作のサブセットのみをサポートしています。

+0

ありがとう、私は提案したものを見つけましたエラー。 –