使用触发器从两个表创建可更新的VIEW

时间:2014-09-29 09:13:01

标签: android sqlite

我正在创建一个使用sqlite数据库和...的

的Android应用程序

我的数据库逻辑有问题。我有两张表格如下:

TBL_First

id(int),first_name(text),first_qty(int)

TBL_Second

id(int),second_name(text),second_qty(int)

每个表格将用于单独的活动。

每个表的数量列都有 0 默认值,用户可以在运行时更改它。

另外,我的最后一项活动将显示 TBL_First & TBL_Second 其中qty列为

这些表大于0

我已将 TBL_Final 用于我的新活动,如下所示:

INSERT INTO "TBL Final"(final_name, final_qty)
SELECT first_name,first_qty FROM "TBL_First" WHERE first_qty > 0
UNION ALL
SELECT second_name,second_qty FROM "TBL_Second" WHERE second_qty > 0

我可以获取 TBL_final 的数据并向用户显示其数据,但是如果用户想要更新 final_qty first_qty

second_qty 无法更新!

我认为我可以使用 VIEW 而不是 TBL_Final ,但我知道它不会更新!

我搜索了这个问题,发现触发器可能会有所帮助。

不幸的是,我根本不熟悉视图触发器

我知道我可以使用 VIEW ,但我不知道如何使用触发器更新 view_qty < BR />

first_qty second_qty !!!

create or replace view final_view (view_name,view_qty) as
select first_name,first_qty where first_qty > 0
union all
select second_name,second_qty where second_qty > 0

任何建议都会受到赞赏......

1 个答案:

答案 0 :(得分:0)

触发器可以使用OLD和NEW表别名访问视图行的旧值和新值;它必须使用它们来查找基表的行:

CREATE TRIGGER final_view_update
INSTEAD OF UPDATE OF view_qty ON final_view
FOR EACH ROW
BEGIN
    UPDATE first_qty
      SET first_qty = NEW.view_qty
      WHERE first_name = NEW.view_name;
    UPDATE second_qty
      SET second_qty = NEW.view_qty
      WHERE second_name = NEW.view_name;
END;

触发器总是执行两个UPDATE,但只有一个WHERE子句匹配。