TransWikia.com

Можно сделать поле ToggleLine = NULL в зависимости от значения поля IdGeometryType?(SQL) Сделать дефолтное значение с условием

Stack Overflow на русском Asked on December 28, 2021

У меня есть таблица PanoramaObj:
введите сюда описание изображения

Можно автоматически делать поле ToggleLine = NULL, если IdGeometryType != 0?
если равен IdGeometryType == 0; ставить дефолтное значение false.

Тип ToggleLine – Bool, который может быть NULL

введите сюда описание изображения

В дефолтные значение не добавляются SQL запросы:

введите сюда описание изображения

One Answer

В тегах к вопросу отмечена СУБД sqlite. По этому я могу предложить решение этой задачи в рамках возможности именно этой СУБД. Но с учетом, что эта СУБД не является строго типизированной СУБД, то значения false и NULL как таковые для неё ничего не значат. По этому что бы выполнить ваше условие вопроса они взяты в кавычки, что сама sqlite интерпретирует как строковые константы. И так, сначала создаем таблицу и нужный триггер:

CREATE
    TABLE PanoramaObj (
        idGeometryType INTEGER,
        ToggleLine BOOLEAN DEFAULT "false"
);

CREATE TRIGGER ToggleLine_Change
AFTER INSERT ON PanoramaObj FOR EACH ROW
BEGIN
    UPDATE PanoramaObj SET ToggleLine = "NULL" WHERE idGeometryType != 0;
END;

Затем наполняем таблицу тестовыми кортежами:

INSERT INTO PanoramaObj (idGeometryType) VALUES (1);
INSERT INTO PanoramaObj (idGeometryType) VALUES (0);
INSERT INTO PanoramaObj (idGeometryType) VALUES (5);
INSERT INTO PanoramaObj (idGeometryType, ToggleLine) VALUES (0, "true");

В результате получаем таки записи:

SELECT * FROM PanoramaObj;

idGeometryType|ToggleLine
1|NULL
0|false
5|NULL
0|true

При этом этот триггер, как видно из выборки не мешает задавать и true в записях, если не выполняется условие !=0

P.S: вашу огромную таблицу пришлось для примера сократить :)

P.P.S: И если делать выборку уже из существующей базы с неправильно расставленным полем TogleLine, то можно это делать через представление примерно вот так:

CREATE VIEW PanoramaObj_view AS
    SELECT
        idGeometryType,
        CASE WHEN idGeometryType != 0 THEN "NULL" ELSE "true" END
            AS ToggleLIne
    FROM PanoramaObj;

Answered by Сабир Исламов on December 28, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP