は... は、我々は2つのテーブルを持っていると仮定しますか?私のcreateTable操作が正しいですか? 私が持っているしたいと思います: 子が複数の犬 に犬を持つことができるより多くの子供SQLiteの外部キーとして
* EDIT * * 私が望んでいた場合は、すべての子どもたちとそれぞれの子のためを持つことができますその子供に関連する犬のリスト? *
は... は、我々は2つのテーブルを持っていると仮定しますか?私のcreateTable操作が正しいですか? 私が持っているしたいと思います: 子が複数の犬 に犬を持つことができるより多くの子供SQLiteの外部キーとして
* EDIT * * 私が望んでいた場合は、すべての子どもたちとそれぞれの子のためを持つことができますその子供に関連する犬のリスト? *
ゼロ以上の犬と0個以上の子どもたちに属している犬を持つ子供をサポートするために、データベースのテーブル構造は、多対をサポートする必要があります多くはの関係です。これは、3つのテーブルが必要です。別のSQL文でなければならない3つのテーブルのそれぞれに
のインサートを挿入するには、同じトランザクションのコンテキスト内で場所を取ることができますどのように
CREATE TABLE child (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT
);
CREATE TABLE dog (
id INTEGER PRIMARY KEY AUTOINCREMENT,
dog TEXT
);
CREATE TABLE child_dog {
child_id INTEGER,
dog_id INTEGER,
FOREIGN KEY(child_id) REFERENCES child(id),
FOREIGN KEY(dog_id) REFERENCES dog(id)
};
挿入のためのいくつかの例のSQL文は、次のとおりです。
私は仮定しますので、あなたの質問はこの質問にPythonのタグがあり、パイソンは言及しなかったが、Pythonので挿入
INSERT INTO child VALUES(NULL, 'bobby');
SELECT last_insert_rowid(); -- gives the id of bobby, assume 2 for this example
INSERT INTO dog VALUES(NULL, 'spot');
SELECT last_insert_rowid(); -- gives the id of spot, assume 4 for this example
INSERT INTO child_dog VALUES(2, 4);
# Import the sqlite3 module
import sqlite3
# Create a connection and cursor to your database
conn = sqlite3.connect('example.db')
c = conn.cursor()
# Insert bobby
c.execute("""INSERT INTO child VALUES(NULL, 'bobby')""")
# The python module puts the last row id inserted into a variable on the cursor
bobby_id = c.lastrowid
# Insert spot
c.execute("""INSERT INTO dog VALUES(NULL, 'spot')""")
spot_id = c.lastrowid
# Insert the mapping
c.execute("""INSERT INTO child_dog VALUES(?, ?)""", (bobby_id, spot_id));
# Commit
conn.commit()
conn.close()
これには3つのテーブルが必要です。これは、Many-to-Many
の関係の例です。
Child
- ChildID (PK)
- Name
Dog
- DogID (PK)
- DogName
Child_Dog
- ChildID (FK)
- DogID (FK)
申し訳ありませんが、SELECT(すべて)を実行する場合は、結合を使用しますか?どのようにクエリになりますか? – Safari
@GgSalentはあなたが選択して取得しようとしているものによって異なります。ここにいくつかの例があります: 'SELECT name、dog FROM child、dog、child_dog where child.id = child_dog.child_id AND dog。すべての組み合わせを選択するためのid = child_dog.dog_id'と、child.id = child_dog.child_idとdog.id = child_dog.dog_idとAND name = 'bobby''の両方を選択するために使用されます。内部結合、グループ句による集計などは、必要な情報に応じてオプションになります。 –
とても素敵な答えです、ありがとうKen! – dotancohen