powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / удаление из связанных баз
4 сообщений из 4, страница 1 из 1
удаление из связанных баз
    #39385782
Artem Sh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Создаю три таблицы
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
PRAGMA foreign_keys=on;

CREATE TABLE IF NOT EXISTS signals (
    id INTEGER PRIMARY KEY,
	signal	TEXT NOT NULL,
	R1	INTEGER NOT NULL DEFAULT 0,
	R2	INTEGER NOT NULL DEFAULT 0,
	R3	INTEGER NOT NULL DEFAULT 0
);

CREATE TABLE IF NOT EXISTS sig_pages (
    id INTEGER PRIMARY KEY,
	sig_index	INTEGER,
	v_signal_value	TEXT NOT NULL,
FOREIGN KEY (sig_index) REFERENCES signals(id)
);

CREATE TABLE IF NOT EXISTS sig_pages_R (
    id INTEGER PRIMARY KEY,
	v_sig_index	INTEGER NOT NULL,
	v_sig_root	TEXT NOT NULL,
	root_R	INTEGER NOT NULL,
FOREIGN KEY (v_sig_index) REFERENCES sig_pages(id)
);



данные
Код: sql
1.
2.
3.
4.
5.
6.
7.
INSERT INTO signals (signal, R1) values ("собака", 5 );
INSERT INTO signals (signal, R1) values ("кошка", 1 );
INSERT INTO signals (signal, R1) values ("собачонка", 3 );
INSERT INTO signals (signal, R1) values ("муха", 1 );

INSERT INTO sig_pages (sig_index, v_signal_value) values (2, "сидит на окне");
INSERT INTO sig_pages_R (v_sig_index, v_sig_root, root_R) values (1, "А", 2);



Т.о. кошка и муха имеют R1=1, но у кошки есть данные в sig_pages, а у мухи их нет.


Запрос на удаление всех данных с signals.R1=1
Код: sql
1.
2.
3.
4.
5.
6.
7.
DELETE FROM signals
WHERE signals.id IN
(SELECT signals.id
FROM signals LEFT OUTER JOIN sig_pages ON sig_pages.sig_index = signals.id
LEFT OUTER JOIN sig_pages_R ON sig_pages_R.v_sig_index = sig_pages.id
WHERE
signals.R1 = 1)



В DB browser запрос успешно делает то что должен, а в разрабатываемом приложении точно тот же запрос выдаёт ошибку:

SQLite.lvlib:Connection.lvclass:Execute SQL (No results).vi:3980001:Step on "
DELETE FROM signals
WHERE signals.id IN
(SELECT signals.id
FROM signals LEFT OUTER JOIN sig_pages ON sig_pages.sig_index = signals.id
LEFT OUTER JOIN sig_pages_R ON sig_pages_R.v_sig_index = sig_pages.id
WHERE
signals.R1 = 1)"

SQLITE_CONSTRAINT: FOREIGN KEY constraint failed

В чём может быть проблема?
Среду разработки перезагружал, базу несколько раз пересоздавал, ничего не помогает.

И вопрос вдогонку.
Тут в примере 3 таблицы, но их 5 (sig_pages2 и sig_pages2_R существуют в идентичных копиях, но с разными данными).
При этом отношения
Signals.id=sig_pages.sig_index
sig_pages.id = sig_pages_R.v_sig_index
Signals.id=sig_pages2.sig_index
sig_pages2.id = sig_pages2_R.v_sig_index
т.е. на Signals "ссылаются" две таблицы, на каждую из которых ссылаются по одной.
Как в такой схеме формировать join для удаления?
...
Рейтинг: 0 / 0
удаление из связанных баз
    #39385864
pit_alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Artem Sh,

на оба FK добавить
Код: sql
1.
ON DELETE CASCADE
...
Рейтинг: 0 / 0
удаление из связанных баз
    #39398734
Artem Sh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pit_alex,

спасибо, помогло
...
Рейтинг: 0 / 0
удаление из связанных баз
    #39399036
pit_alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Artem Sh,

нзч
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / удаление из связанных баз
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]