Хорошо, так что здесь нужно знать пару вещей, так как было несколько ошибок.Чтобы избежать проблем, необходимо проверить все элементы, о которых говорится в ошибке.
- Часть сообщения об ошибке
cannot find an index in the referenced table
означает, что столбец / поле, указанное в предложении REFERENCES
, долженбыть проиндексирован в другой таблице. - Тогда определение типа столбца столбца, указанного в предложении
FOREIGN KEY
, должно совпадать с типом столбца столбца, указанного в предложении REFERENCES
, так что даже еслиПервый элемент исправляет часть проблемы, все еще будет ошибка, связанная с другой частью сообщения: ...or column types in the table and the referenced table do not match
.
Итак, чтобы исправить элемент 1, выполните эти 2 запроса:
ALTER TABLE `tblbelegpositionen` ADD INDEX(`belegfID`);
ALTER TABLE `tbleckassenschnittpositionen` ADD INDEX(`belegfID`);
Затем, чтобы исправить пункт 2, мне пришлось изменить первый столбец таблицы tblBelege с этого:
`belegid` INT UNSIGNED NOT NULL AUTO_INCREMENT,
на этот:
`belegid` INT NOT NULL,
... такчто они соответствуют тому же типу, что и столбец belegfID
, как определено в других таблицах.После этих двух изменений я смог успешно выполнить ваш оператор CREATE TABLE `tblBelege`
.
Итак, резюмируя:
- Запустите операторы создания таблицы для
tblbelegpositionen
и tbleckassenschnittpositionen
. - Затем выполните операторы 2
ALTER
, показанные выше для элемента 1. - Измените первый столбец таблицы
tblBelege
, чтобы он соответствовал типам столбцов, определенным для belegfID
в другомтаблицы для элемента 2. - Затем запустите измененный оператор CREATE TABLE (с применением изменения элемента 2), чтобы создать таблицу
tblBelege
.
Я немного запуталсятот же FOREIGN KEY, ссылающийся на 2 разные таблицы, но если он работает для вас, тогда хорошо.(не говоря о том, что это невозможно сделать, я никогда не использовал внешний ключ таким образом) Возможно, вы имели в виду обратное, чтобы иметь внешний ключ в двух других таблицах (по 1 в каждой таблице), которые вместо этого ссылаются на tblBelege?Если это так, то вы можете добавить unsigned
к определению типа для belegfID, и это сработает, и не потребуются изменения, о которых я упоминал с помощью пункта 2.
О, и послевы запускаете операторы ALTER
, вы можете просмотреть структуру таблицы, выполнив:
SHOW CREATE TABLE `tblbelegpositionen`;
SHOW CREATE TABLE `tbleckassenschnittpositionen`;
..., чтобы получить определение KEY
, добавленное для включения в ваши операторы CREATE TABLE.Поскольку оба они создают один и тот же ключ, вам действительно нужно выполнить только один из этих операторов, а затем добавить определение KEY в оба оператора таблицы.