【发布时间】:2015-05-12 21:06:06
【问题描述】:
我被UPDATE 卡住了。我的表格最初是:
Clients
------------------
ID
Emails
Notification_type
Contracts
------------------
ID
Client_id (FK)
Contracts_document_types
------------------
Contract_id (FK)
Document_type_id (FK)
我可以根据Clients 表进行通知。然后我不得不更改通知方法。我的数据库更改为:
Contracts_document_types
------------------
Contract_id (FK)
Document_type_id (FK)
Notification_method_id (FK)
Notification_methods
------------------
ID
emails
notification_type
我能够根据客户创建必要的notification_methods 条目,但我没有找到在contracts_document_types.notification_method_id 中关联的方法。可以根据clients 表找到notification_method,但是要更新的表是contracts_document_types,我不知道如何。
我的想法是这样的:
update contracts_document_types
set notification_method_id = query.nm_id
from ( select NM.id as nm_id from notification_methods NM
inner join clients C on C.emails = NM.emails
and C.notification_type = NM.notification_type
) as query
where ????????
可以从clients(信息所在的位置)访问contracts_document_types,但我无法将它们与正确的用户相关联。我在UPDATE FROM 语句中遗漏了一些关于迭代过程的重要内容。
简历:1 个客户有很多contracts_document_types,我有一个基于客户创建的notification_method。我找不到将正确的 notification_method 放在每个客户端(来自该客户端的所有contracts_document_types)的方法。
【问题讨论】:
-
您能否提供一些客户示例、他们的合同以及简短说明您如何找到此示例数据的通知?
-
考虑使用临时表使更新语句尽可能简单。我会说在更新中使用子查询不是一个好主意,因为它更难理解而且容易出错......
-
@voytech:有利的一面:一旦你确实理解它,它就会神奇地转变为一个绝妙的想法。
-
没错。任何人都可以用任何编程语言创建脚本或使用临时表来解决它,这不是一个坏主意,但这种说法似乎很强大,花费的时间很快就会得到回报。
标签: sql postgresql sql-update