1

私の INSERT ステートメントは次のとおりです。

INSERT INTO StudentRecord ( Name, schoolid, age)
VALUES ('Hello', 1, '12')

データベースに 2 つのテーブルがあります。

1位 --

School次のフィールドがあります。

id, schoolName

2位 --

StudentRecord また、次のフィールドがあります。

studentid, studentName, schoolid, age

今私がしたいことは、schoolId の代わりに Schools Name を挿入ステートメントに追加し、それをStudentRecordテーブルに保存することです。これどうやってするの ?

たとえば、1schoolId として追加した場所は、学校の名前である必要があります。

4

5 に答える 5

1

insert ... select代わりに使用できますinsert ... values

insert  StudentRecord
        (Name, Schoolid, Age)
select  @StudentName
,       id
,       @StudentAge
from    Schools
where   schoolName = @SchoolName

@SchoolName値を入力する変数 ( など) を追加しました。

于 2013-02-23T19:13:19.150 に答える
1

OPへ....あなたが少しぼんやりしているいくつかのデータベース理論があり、人々があなたに与える答えが完全に理にかなっている前に、それを明確に理解する必要があります。

挿入後に生データ テーブルを見て、すべてのフィールドがデータのテキスト表現であると期待しないでください。クエリを使用して適切なテーブルを相互に結合し、データを読み取り可能な形式で表示して、挿入後にデータを確認する必要があります。読み取り可能な形式で挿入しません。挿入し、クエリを実行して、読み取り可能な形式で表示します。

ID の代わりに学校名を使用して、データベースを非正規化しています。正規化は、システムの冗長性をなくし、データベースのパフォーマンスを最適化するための重要な概念です。たとえば、1 か所を 1 回変更すると、それを使用するすべてのレコードが変更されます。正規化を理解すると、なぜこれが悪い解決策なのかを理解できるようになります。

ここにいくつかのリンクがあります。

マイクロソフトの KB 記事

ウィキペディア データベースの正規化

于 2013-02-23T20:16:30.190 に答える
0

schoolid を schoolName に変更します。

schoolid を使用して schoolName を取得します。(SELECT を使用)

取得したら、そこに schoolName を保存できます。

于 2013-02-23T19:16:54.720 に答える
0

テーブルを変更する必要があります..

ALTER TABLE StudentRecord ALTER COLUMN schoolid varchar(100)

学校IDの代わりに学校名を入力するだけです!

于 2013-02-23T19:18:40.267 に答える
-1

構造を非正規化しているため、なぜこれを行う必要があるのか​​ わかりません。ageまた、変更され、計算フィールドであるため、保存しないでください。代わりに生年月日を保存します。

しかし、このようなものはうまくいくかもしれません:

INSERT INTO someTable
SELECT a.studentId, a.studentName, b.schoolName, a.age
FROM StudentRecord a
INNER JOIN School b ON b.id = a.schoolid
于 2013-02-23T19:13:24.630 に答える