Я использую (в SQL) DELETE
с несколькими SELECT
с, но я получаю несоответствие внешнего ключа.
Оператор SQL:
DELETE FROM tile_items
WHERE tile_id IN (SELECT id
FROM tiles
WHERE house_id IN (SELECT id
FROM houses
WHERE owner <> 0
AND owner NOT IN (SELECT id FROM players)))
Но я получаю ошибку
Несоответствие внешнего ключа - "tile_items" ссылается на "плитки"
Странно то, что то же утверждение, но с SELECT * FROM
вместоиз DELETE FROM
, возвращает все 44 совпадающих записи.
Я также пытался включить имя таблицы перед полем, но я получаю ту же ошибку.
DELETE FROM tile_items
WHERE tile_items.tile_id IN (SELECT id
FROM tiles
WHERE tiles.house_id IN (SELECT id FROM houses
WHERE houses.owner <> 0
AND houses.owner NOT IN (SELECT id FROM players)))
Не уверен, еслинеобходимо, но вот таблицы:
CREATE TABLE "tile_items"
(
"tile_id" INTEGER NOT NULL,
"world_id" INTEGER NOT NULL DEFAULT 0,
"sid" INTEGER NOT NULL,
"pid" INTEGER NOT NULL DEFAULT 0,
"itemtype" INTEGER NOT NULL,
"count" INTEGER NOT NULL DEFAULT 0,
"attributes" BLOB NOT NULL,
UNIQUE ("tile_id", "world_id", "sid"),
FOREIGN KEY ("tile_id") REFERENCES "tiles" ("id")
)
CREATE TABLE "tiles"
(
"id" INTEGER NOT NULL,
"world_id" INTEGER NOT NULL DEFAULT 0,
"house_id" INTEGER NOT NULL,
"x" INTEGER NOT NULL,
"y" INTEGER NOT NULL,
"z" INTEGER NOT NULL,
UNIQUE ("id", "world_id"),
FOREIGN KEY ("house_id", "world_id") REFERENCES "houses" ("id", "world_id")
)
Поскольку ошибка привела только к таблицам "tile_items" и "плитки", размещены только эти схемы.
Надеюсь, кто-то может объяснить, почему яне могу УДАЛИТЬ, но могу ВЫБРАТЬ с этим утверждением, спасибо.