2017-01-11 4 views
0

よくある問題です。私はグーグルで読んだけど、私の問題はちょっと変だ。MySQL「PRIMARY」キーが重複していますが、少し奇妙です

私はこれらの主キーを使用してテーブルを持っている:

ALTER TABLE `companies` 
    ADD PRIMARY KEY(
    `name_employee`, 
    `email`); 

だから、主キーがname_employeeemailのcompinationです。

例(期待通りに他の人が主と働いていないとして、私は唯一の主キーの挿入を与える)での問題:

まず挿入OK:

name_employee = 'Pavlos Pavlos' 
email = '[email protected]' 

第二の挿入OK:

name_employee = 'John John' 
email = '[email protected]' 

第3挿入BAD:

name_employee = 'Nick Nick' 
email = '[email protected]' 
ポップアップ表示

エラー:

Error: INSERT INTO companies (name, account_number, dateExp, credit_limit, amount_debt, balance, name_employee, id_employee, email, password) SELECT name, account_number, dateExp, credit_limit, amount_debt, balance, 'Nick Nick', '250', '[email protected]', 'pass' FROM companies WHERE email='[email protected]' Duplicate entry 'Nick [email protected]' for key 'PRIMARY'

しかしname_employee = Nick Nickemail = [email protected]と別の行がありません。本当に奇妙である何

は、それは私が同じemailが異なるname_employeeと第2の挿入を行うことができますということですが、それは私が挿入時にそのため第三のために同じことを行うことはできません。

助けてください。

EDIT: これは割り当てていると私はより多くのキー/主キーを追加することはできませんなど また、私は同じ会社の下での従業員の多くを必要とし、我々はそのname_employeeはなぜだそれぞれに対して異なっていると仮定することができますこれらの主キーを使用しました。

+0

insert-selectは2つの行を挿入しようとしています。表示するために選択を単独で実行します。 – Uueerdo

+1

おそらく、それをプライマリキーにしたくない場合は、レコードを取得するのが本当に不愉快になり、他のテーブルからリンクする手間がかかります。単純な 'INT'プライマリを持ち、セカンダリ' UNIQUE'制約を作ります。 – tadman

+0

@tadman最後に最初の投稿を確認して、編集しました。 – PavTze

答えて

2

このクエリ

SELECT 
    name, account_number, dateExp, credit_limit, amount_debt, balance, 
    'Nick Nick', '250', '[email protected]', 'pass' 
FROM companies 
WHERE email='[email protected]' 

email'[email protected]'に等しいテーブルcompaniesから行を選択します。これは2行('Pavlos Pavlos''John John')に当てはまります。したがって、'Nick Nick'を2回挿入しようとしています。したがって、エラー。

+0

私はそれを得る、それぞれの出現ごとに1つの行だけを選択する方法はありますか? – PavTze

+1

なぜあなたはテーブルから選択しますか?代わりにvalues節を使用してみませんか?あなたはここで何を達成しようとしていますか? –

+0

他の方法がないなら、私はそれを変更する必要があるようです。 – PavTze

関連する問題