Гость
Форумы / SQLite [игнор отключен] [закрыт для гостей] / ON UPDATE CASCADE - 1 столбец из 4 не срабатывает / 4 сообщений из 4, страница 1 из 1
24.12.2016, 17:24
    #39374449
bukreevlad
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ON UPDATE CASCADE - 1 столбец из 4 не срабатывает
Добрый день форумчане!
Мои мысли ни как не могут найти выход из сложившейся ситуации.

REFERENCES Procuctcat (id) ON UPDATE CASCADE - срабатывает
REFERENCES Product (itemid) ON UPDATE CASCADE - срабатывает
REFERENCES Procuctcat (id) ON UPDATE CASCADE - срабатывает
REFERENCES Product (name) ON UPDATE CASCADE - не срабатывает

SQlite ответ: An error occurred while committing the data: foreign key mismatch - "Sales" referencing "Product"
Если указать в таблице Product столбце name значение UNIQUE - то запрос на изменение ячеек срабатывает..

Код создаваемых таблиц:

Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
CREATE TABLE Procuctcat (
    id   TEXT PRIMARY KEY
              UNIQUE
              NOT NULL,
    name TEXT NOT NULL
);

CREATE TABLE Product (
    id      TEXT    UNIQUE
                    NOT NULL
                    PRIMARY KEY,
    itemid  TEXT    UNIQUE
                    NOT NULL,
    cat     TEXT    NOT NULL
                    REFERENCES Procuctcat (id) ON UPDATE CASCADE,
    name    TEXT    NOT NULL,
    price   INTEGER NOT NULL,
    count   INTEGER NOT NULL,
    archive INTEGER NOT NULL
);

CREATE TABLE Sales (
    id       TEXT    UNIQUE
                     NOT NULL
                     PRIMARY KEY,
    itemid   TEXT    NOT NULL
                     REFERENCES Product (itemid) ON UPDATE CASCADE,
    cat      TEXT    NOT NULL
                     REFERENCES Procuctcat (id) ON UPDATE CASCADE,
    name     TEXT    NOT NULL
                     REFERENCES Product (name) ON UPDATE CASCADE,
    price    INTEGER NOT NULL,
    count    INTEGER NOT NULL,
    discount INTEGER NOT NULL,
    date     NUMERIC NOT NULL
);



Скриншоты таблиц под спойлером




...
Рейтинг: 0 / 0
24.12.2016, 20:16
    #39374507
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ON UPDATE CASCADE - 1 столбец из 4 не срабатывает
bukreevlad,

Поле Product.name не ключевое и SQLite при каскадном обновлении не знает какую именно обновлять. Т.к. Name не уникально (ни PRIMARY ни UNIQUE) и может быть использовано в нескольких записях. Да и зачем хранить Name в Sales, если оно есть в справочнике Product?
...
Рейтинг: 0 / 0
24.12.2016, 21:07
    #39374547
bukreevlad
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ON UPDATE CASCADE - 1 столбец из 4 не срабатывает
VSVLAD,

VSVLADДа и зачем хранить Name в Sales, если оно есть в справочнике Product?
Тут я с тобой согласен, и уже переделал базу данных.

А как в таких случаях поступать ? Если при выборке или каскадном обновлении вступают в конфликт две с одинаковым именем колонки? Можно ли как то явно указать из какой таблицы с именем id получить значение?

Вот сейчас пишу код, что бы вытянуть из таблицы Product название продукции. Столкнулся с тем, что в обоих таблицах есть колонки с именем id :

Код: sql
1.
2.
3.
4.
5.
SELECT Sales.count, Sales.discount, Product.name
	FROM Sales
	INNER JOIN Product
	ON Sales.product_id = Product.id
	WHERE id = '$id';"



Ошибка при выполнении SQL запроса к базе данных 'db_000000001': ambiguous column name: id - Именно то, что ты и говоришь...
...
Рейтинг: 0 / 0
25.12.2016, 17:56
    #39374830
bukreevlad
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ON UPDATE CASCADE - 1 столбец из 4 не срабатывает
bukreevlad,

Уже разобрался! Спасибо!

Код: sql
1.
2.
3.
4.
5.
SELECT Sales.count, Sales.discount, Product.name
	FROM Sales
	INNER JOIN Product
	ON Sales.product_id = Product.id
	WHERE Sales.id = '$id';"
...
Рейтинг: 0 / 0
Форумы / SQLite [игнор отключен] [закрыт для гостей] / ON UPDATE CASCADE - 1 столбец из 4 не срабатывает / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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