たとえば、次の2つのテーブルがあります。
TAB_TEACHER
- id_teacher // primary key, autoincrement
- name_teacher // a varchar
TAB_STUDENT
- id_student // primary key, autoincrement
- name_student // a varchar
- id_teacher_fk // foreign key reference to a teacher (TAB_TEACHER)
これらの2つの場合に挿入する方法を知りたいです。
ケース1-既存の教師を持つ新しい学生を挿入するため、教師名を持つ外部キーを取得する必要があります
ケース2-新しい教師と新しい生徒を挿入します(生徒を作成するのと同時に作成する教師)
http://dev.mysql.com/doc/refman/5.0/en/insert-select.html
Case1の場合:
INSERT INTO TAB_STUDENT(name_student, id_teacher_fk)
SELECT 'Joe The Student', id_teacher
FROM TAB_TEACHER
WHERE name_teacher = 'Professor Jack'
LIMIT 1
Case2の場合、2つの個別の挿入ステートメントを実行するだけです。
私が使用する代替構文は次のとおりです。
_INSERT INTO tab_student
SET name_student = 'Bobby Tables',
id_teacher_fk = (
SELECT id_teacher
FROM tab_teacher
WHERE name_teacher = 'Dr. Smith')
_
Excelでこれを行って、ピボットテーブルをSQLのディメンションテーブルとファクトテーブルにインポートし、次からdepartment
テーブルとexpenses
テーブルの両方にインポートできるようにします。
幸いなことに、MySQLはLAST_INSERT_ID()
をまさにこの目的でサポートしています。
_INSERT INTO tab_teacher
SET name_teacher = 'Dr. Smith';
INSERT INTO tab_student
SET name_student = 'Bobby Tables',
id_teacher_fk = LAST_INSERT_ID()
_
INSERT INTO tab_student (name_student, id_teacher_fk)
VALUES ('dan red',
(SELECT id_teacher FROM tab_teacher WHERE name_teacher ='jason bourne')
検索を簡単にし、エラーを起こしにくいように、値を小文字で保存することをお勧めします
INSERT INTO tab_teacher (name_teacher)
VALUES ('tom stills')
INSERT INTO tab_student (name_student, id_teacher_fk)
VALUES ('rich man', LAST_INSERT_ID())