如果列值 id 与另一个表中的 ID 描述匹配,则在指定列中插入数据(规范化形式)
Posted
技术标签:
【中文标题】如果列值 id 与另一个表中的 ID 描述匹配,则在指定列中插入数据(规范化形式)【英文标题】:Insert Data in specified column if column value id matches the description of the ID in another table (normalized form) 【发布时间】:2017-04-10 08:00:42 【问题描述】:为了做到这一点(在标题描述中),很明显它已经是一个规范化的数据库,因此肯定会使用内部连接类型的检查。
假设我们有一个客户表和一个给定的 customer_ID 作为主键,以及描述名字姓氏等以及另一个表 (Customer_Sales_History) 的 Customer_ID 列,也是为了使其可搜索查询。
更新: 我的困难是我需要在特定列中添加以 XML(Soap 响应)格式获取的特定数据,但通过 Customer_Name 和 Customer_Lastname 检查附加到特定的 Customer_ID。
如果 Customer_Name = "John" 和 Customer_Lastname = "Martin",则使用值填充 salescode productquantity 和 productdescription
卷很大(数千行),因此 sql 可能必须作为来自另一个表的插入来填充,我对那种类型的 slqing 卷很陌生。
Customer Table
Customer_ID | Customer_Name | Customer_Lastname
1 | John | Martin
2 | Jack | White
3 | Don | Carrera
Customer_Sales_History Table
Customer_ID | Sales_Code | ProductQuantity | ProductDescription
2 | X | X | X
为了将给定数据插入到 Customer_Sales_History 表中,将 Customer_ID 2 作为给定目标,我必须匹配 Customer_Name = Jack 和 Customer_Lastname = White 的行并填充 Sales_Code Product_Quantity 和 Product Description。
【问题讨论】:
那么“XML 格式”应该是什么样子?里面需要什么资料?您真的需要插入 数据还是要更新 历史记录表中的现有行? sales_code、productquantity 和 productdescription 的值从何而来?您的客户表似乎没有。 这是一个肥皂反应,所以它就像insert into customer_sales_history (...) values (...)
?
我可以预先创建表,因此在该 SQL 语句中创建不是问题。
如果我只是简单地添加它们,我将与已列出的客户创建副本,而我真正想要的是将销售附加到已存储的客户。如果它们已经存在。
【参考方案1】:
Update ch
set ch.sales_code = ...,
ch. ProductQuantity =...,
from Customer_Sales_History ch join Customer c on ch. Customer_ID= c.Customer_ID
where ch.Customer_ID=2
【讨论】:
不要不要在 UPDATE 语句的from
子句中指定目标表,除非您希望将该表与其自身进行交叉连接。
你是什么意思?你能写下来吗?
手册上已经写了:postgresql.org/docs/current/static/sql-update.html(见from_list
部分)
“它必须以别名出现在 from_list 中”。所以没关系。不是吗?
不,不是 - "请注意,目标表必须不出现在 from_list 中,除非您打算自加入" - 您的update 语句 will 创建一个完全没有必要的自连接,并且会导致更多行被更新 - 这是完全错误的(另外:adtoctor 想要 insert 数据,而不是更新)【参考方案2】:
如果您已将客户表中的customer_ID 声明为主键,将Customer_Sales_History 表中的customer_ID 声明为外键,那么它将自动执行检查部分。 那么,为什么需要显式检查 customer_id?
【讨论】:
因为我给定的数据不知道数据库格式,他们只是给你客户的描述,例如 Jack White 是我必须在行中匹配的描述才能插入新的数据。以上是关于如果列值 id 与另一个表中的 ID 描述匹配,则在指定列中插入数据(规范化形式)的主要内容,如果未能解决你的问题,请参考以下文章
如何通过将一个表中的 id 与另一个表匹配来选择和更新一个表中的记录?