2017-12-28 21 views
0

私のSpecializationテーブルの主キーは複雑で、Specialization_idとSpecialty_idの2つのカラムで構成されています(これはSpecialtyテーブルの外部キーです)。 私は、既存の専門分野の新しいSPECIALIZATIONを作成して、挿入クエリを作成します。 私のテーブルにはいくつかの特殊化がありますが、id = 1の1つの専門分野の主キーは(1,1)(2,1)、id = 2は(1,2)(2,2)のように見えます。 新しいSpecialization to Specializationテーブルを追加しますが、このSpecializationは既存のSpecialtyを参照する必要があります。 私の考えは、私は句「」で、それはまだ、私は取得していますエラーなしで試してみたクエリエラーの追加

INSERT INTO Specialization (Specialization_name, Specialization_id, Specialty_id) 
VALUES('Network technologies','(SELECT Max(Specialization_id) FROM Specialization WHERE Specialty_id = '2')+1', '2'); 

です。 ここで何をすればいいですか?

答えて

1

サブクエリが引用符で囲まれているため、主なエラーは引用符で、クエリではなく文字列として処理されます。 dstudebaが言ったよう

INSERT INTO Specialization (Specialization_name, Specialization_id, Specialty_id) 
SELECT 'Network technologies' As a, Max(Specialization_id)+1 As b, 2 As c 
FROM Specialization WHERE Specialty_id = 2 

しかし、新しいIDを作成するためのautonumbersに頼ることはおそらく賢く:あなたがメインクエリを持っていない場合

また、あなたは、サブクエリを使用する必要はありません。

+0

このコードは私にエラーを与えます:条件式のデータ型の不一致。 私はSpecialization_nameを短いテキスト、Specialization_idを番号、Specialty_idを番号としています。 全体的に私はこのクエリを取得しません、どこにVALUES(..)ですか? また、私のクエリも引用符なしで動作していない場合、次のエラーが発生します。クエリ入力には、少なくとも1つのテーブルまたはクエリが含まれている必要があります。 – RaiseLtwiCe

+0

「VALUES」はありません。INSERT INTO ... SELECT句です。[here](https://support.office.com/en-us/article/INSERT-INTO-Statement-e12fd58b-33b1)に記載されています。 -479c-8221-e9f245ab8d24)。タイプの不一致がある場合は、各フィールドのデータタイプを指定してください。 'Specialization_id'が数字でない場合、' Max'は予期しない結果を返すでしょう(specialty_idが数字であると仮定して編集されます) –

+0

私はSpecialization_nameを数字として、Specialization_idを数字として、Specialty_idを数字として持っています。 – RaiseLtwiCe

2

MySQLやORACLEのようなデータベースでは、プライマリキーをプログラム的にインクリメントしないでください。代わりに、データベースを設計するときにフィールドをAUTOINCREMENTに設定する必要があります。ごINSERT声明変化するであろう

:だけではるかに簡単ではありません

INSERT INTO Specialization (Specialization_name, Specialty_id) 
VALUES('Network technologies', '2') 

は、それが安全です。

編集:Specialty_idは文字列ですか。私はそれが何らかの数字であると思うだろう。

+0

私は専門家ではありませんが、私は複雑な主キーでは正しく動作しません。私が作ったのは、コンポジションを持っているときに複雑なPKを持っていなければならないと読んだからです。 – RaiseLtwiCe

+0

@RaiseLtwiCe複合主キーを参照していますか?正しい場合は、複合主キーを自動インクリメントしませんが、手動で増分することはありません。主キーで手動で割り当てる必要があるものは何ですか? – dstudeba

+0

申し訳ありませんが、私の主キーはコンポジットです。私は一般的な状況を説明しようとします。私はテーブルSpecializationとSpecialtyを持っています。スペシャライゼーションテーブルのレコードは、スペシャルテーブルを必要とする専門書なしでは存在できません。だから私の知識によれば、Specializationテーブルの私のPKは(Specialization_id、Specialty_id(SpecialtyテーブルのFKとして))でしょう。私がspecialization_idを増やす場合、私はいくつかのIDを失うでしょう、例えば私はPK(1,1)(2,1)を持っています、そして、別のspecialty_idを参照しなければならないとき、代わりに(3,2)(4,2) (1,2)(2,2) – RaiseLtwiCe