わかりました、これは (おそらく)非常に単純な質問ですが、残念ながら私は MySQL をほとんど知らないので、我慢してください。別のテーブルの外部キーによって制約されていないテーブルからすべての行を削除しようとしています-特定のテーブル、ここには2つのテーブルしかありません。create ステートメントは次のようになります。
CREATE TABLE `testschema`.`job` (
`Job_Id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`Comment` varchar(255) DEFAULT NULL,
PRIMARY KEY (`Job_Id`) USING BTREE,
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
CREATE TABLE `ermieimporttest`.`jobassignment` (
`JobAssignment_Id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`JobId` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`JobAssignment_Id`),
KEY `FK_jobassignment_1` (`JobId`),
CONSTRAINT `FK_jobassignment_1` FOREIGN KEY (`JobId`) REFERENCES `job` (`Job_Id`),
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
私のSQL文は次のとおりです。
DELETE FROM job USING job INNER JOIN jobAssignment WHERE job.Job_Id != jobAssignment.JobId;
これは正しいと思いました。外部キーとしてそのジョブを持つジョブ割り当てが存在しないジョブ テーブルからすべてのジョブを削除する必要があります。ただし、これを実行しようとすると、次のエラーで失敗します。
親行を削除または更新できません: 外部キー制約が失敗しました (
testdatabase
.jobassignment
, CONSTRAINTFK_jobassignment_1
FOREIGN KEY (JobId
) REFERENCESjob
(Job_Id
))
それで、私が間違っている愚かなことは何ですか?
編集: いつものように、ここに投稿してから数秒後に答えが見つかりました。私は(完全に異なる)クエリを使用しました:
DELETE FROM job WHERE Job_Id NOT IN (SELECT JobId FROM jobassignment)
好奇心から、これはそれを行うためのより良い方法ですか?私の最初のアイデアは実現可能でしたか? もしそうなら、それの何が問題だったのですか?