sql - 如何在有或没有加入的情况下更新视图?
问题描述
我注意到有关 MS SQL 命令的问题。该公司的数据库有一个基于 5 个表的视图。这是的结构/代码email_view_test
:
create view [dbo].[email_view_test]
as
SELECT
fi.fund_no,
kw.key_no,
kw.key_title,
f.fac_id,
f.email,
fi.agency_no,
fi.cfda_no,
fi.cont_url,
fi.cont_url2,
fi.due_date,
fi.due_note,
fi.entry_dt,
fi.fundtext,
fi.prog_title,
fi.sponcode,
fi.sect,
fak.Status
FROM
dbo.ff_fundinfo fi
left join ff_fundkey fk on fk.fund_no=fi.fund_no
left join ff_keyword kw on kw.key_no=fk.key_no
left join ff_fackey fak on fak.key_no=kw.key_no
left join ff_faculty f on f.fac_id=fak.fac_id
where due_date>getdate()
GO
我试图通过以下代码将状态更新为“已发送”:
UPDATE email_view_test
SET Status = 'sent' where email= 'lilirasouliha@gmail.com' and fund_no= '99998'
但由于某种原因,fund_no
在更新中不起作用(它只是被忽略了)
代码:
select top 10 * from ff_fackey where status='sent' order by key_no
select top 10 fund_no,key_no,fac_id,status from email_view_test
where status='sent' order by fund_no
结果截图:
如您所见,问题出现在这里,我希望仅更新状态fund_no
,99998
但更新所有fund_no
(在我们的情况下仅99998
和99999
)我认为问题是因为我在 Table 中具有状态ff_fackey
。也许我必须将其更改为其他地方?如果是这种情况,我有权更改状态并将其移动到任何地方。
我认为这是因为我试图通过 View 更新一个表,但我在不同的表中使用了两个不同的列。
这也是我拥有的所有表的构造函数:
我还考虑了在我的更新代码中使用 join 的解决方案,但它不起作用并给出错误:(如果是这种情况,如果可以修复此代码,我将不胜感激)
UPDATE email_view_test v inner join ff_fundinfo f on v.fund_no=f.fund_no
SET v.Status = 'sent' where v.email= 'lilirasouliha@gmail.com' and v.fund_no= '99998' ;
上面代码的更新:我注意到上面代码问题的语法,代码应该如下所示(但它仍然忽略fund_no
更新它)
UPDATE email_view_test
SET Status = 'sent'
from email_view_test join ff_fundinfo on email_view_test.fund_no=ff_fundinfo.fund_no
where email_view_test.fund_no= '99998' and email= 'lilirasouliha@gmail.com'
更新2:我认为问题在于我的观点是检索包括状态在内的数据的方式,我认为我应该以另一种方式检索数据,但不确定如何编写一个只检索正确的 fak.status 的 SQL 命令。
我将不胜感激任何帮助,建议使此更新与操纵状态在可能的表中的位置或更改更新 SQL 代码一起工作。
解决方案
推荐阅读
- java - java中break的使用
- optimization - linprog 优化失败。找不到可行的起点
- c# - 用户编程键绑定
- google-cloud-build - Google CloudBuild 工件 YAML
- html - HAML .each 具有列表和重复项的函数
- javascript - 对象的对象的访问属性
- c# - 合并位时,在移位期间包含 OR 会发生什么
- google-bigquery - 是否有 isnumeric 的 BigQuery 版本
- sequelize.js - 如何在 Sequelize 表中指定范围?
- angular - 更改租户时重新加载整个页面的原因是什么?