将数据插入通过外键链接的表中

2024-03-02

我正在使用 PostgreSQL。

Customer
==================
Customer_ID | Name

Order
==============================
Order_ID | Customer_ID | Price

要插入订单,这是我通常需要做的,

例如,“John”下了“1.34”价格的订单。

(1) Get Customer_ID from Customer table, where name is "John"
(2) If there are no Customer_ID returned (There is no John), insert "John"
(3) Get Customer_ID from Customer table, where name is "John"
(4) Insert "Customer_ID" and "1.34" into Order table.

这个简单的操作涉及到4条与数据库的SQL通信!

有没有更好的方法,可以使用 1 个 SQL 语句来实现?


对于现有客户,您可以使用 1 个 sql 语句来完成此操作,对于新客户,您可以使用 3 个语句来完成此操作。您所要做的就是保持乐观并表现得好像客户已经存在一样:

insert into "order" (customer_id, price) values \
((select customer_id from customer where name = 'John'), 12.34);

如果客户不存在,您将收到一个 sql 异常,其文本类似于:

null value in column "customer_id" violates not-null constraint

(假设您将 customer_id 设置为不可空,我确信您做到了)。发生异常时,将客户插入客户表中,然后重做插入订单表中的操作:

insert into customer(name) values ('John');
insert into "order" (customer_id, price) values \
((select customer_id from customer where name = 'John'), 12.34);

除非您的业务增长速度使“所有钱都花在哪里”成为您唯一真正的问题,否则您的大部分插入内容将是针对现有客户的。因此,大多数时候,异常不会发生,您只需一条语句即可完成。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将数据插入通过外键链接的表中 的相关文章

随机推荐

  • WPF MVVM prism 中的 ASP.net 类似基于表单的身份验证 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在开发 WPF MVVM prism 应用程序后 我想实现身份验证 因为它是基于 ASP NET 表单的身份验证 我想限制用户进入需要授权
  • 支持不可变类的 ORM

    哪个 ORM 支持以下领域模型不可变的 types 我想编写如下所示的类 或 Scala 等效项 class A private final C c not mutable A B b init c A doSomething B b bu
  • 更新由另一个减速器管理的状态

    在我的 React 应用程序中 我的appReducer管理全局内容 例如通知 用户信息等 应用程序中的模块之一是库存模块 它有自己的减速器 即inventoryReducer 在 redux 商店中 我组合了所有减速器 当用户输入库存时
  • FactoryGirl 创建用户,但保存点在测试开始前被释放

    我正在为spec requests user pages specs运行rspec测试 require spec helper describe User pages do subject page describe home page d
  • 我可以从 Chrome 扩展程序访问站点的 localStorage 吗?

    我的 chrome 扩展有两种状态 1 某些站点在localStorage 另一个域 中有身份验证数据 所以我必须显示主窗口 2 没有身份验证数据 因此我必须显示带有登录名和密码表单的窗口 为了定义是否提供身份验证数据 我想检查他的 loc
  • 如何使用pdfkit ios 11打开pdf文件?

    我正在尝试使用新的 iOS 11 框架 pdfkit 打开 PDF 文件 但我无法做到这一点 所以帮助我使用 pdfkit 框架打开文件 先感谢您 这是基于 Objective C 的示例 Ensure PDFKit framework i
  • 推送通知警报文本的最大长度是多少?

    iOS 推送通知的警报文本的最大长度是多少 The 文档 https developer apple com go id push notifications指出通知有效负载总共必须低于 256 字节 https developer app
  • PWA 的推送通知或 Web 推送通知

    首先 我想说我一直在研究推送通知和网络通知 但我有点困惑 我从这里读到 PWA 的推送通知不适用于 Safari 上的 iOS iPhone 从 PWA 向 iOS 发送推送通知 https stackoverflow com questi
  • 如何拥有一个写入服务总线队列的异步函数?

    使用 Azure WebJobs SDK 我想创建一个异步函数 该函数将接收 ServiceBus 队列输入并写入 ServiceBus 队列输出 异步方法不能有 out 参数 例如在 BlobStorage 上 似乎可以通过使用 Stre
  • 解析 nmap 结果

    我正在 Linux 上使用 Python 2 6 开发一个项目 我在终端使用 nmap 来获取这些扫描结果 我在一个字符串中得到了这个结果 Starting Nmap 6 47 http nmap org at 2015 06 28 23
  • 创建 AMI 需要很长时间

    我正在为具有 100G 文件的服务器创建 AMI 已经过去一个多小时了 事情还没有结束 AMI 仍然显示待处理 有什么问题吗 我应该怎么办 只是为了让其他人知道 这个过程可能需要非常非常长的时间 我的 100 GB AMI 大约需要 2 5
  • Excel 2010:查找两个日期时间之间的秒数

    我有一个专栏Cal Date time 其中包含通话的日期和时间 如下所示 A B C D Number Call Date Time Duration in Sec 123 2010 01 10 01 07 24 465000 123 2
  • Android 中应用程序“资产”文件夹的路径是什么?

    我正在开发一个 Android 应用程序 希望在 apk 中捆绑一个视频文件 mp4 以便在启动应用程序时我可以播放简短的介绍视频 不幸的是 我无法弄清楚应该将该视频文件放置在项目文件夹中的哪个位置 以及如何访问它 文件的路径 我在用vid
  • Pandas:iterrow 循环的替代方案

    我有一个在 pandas 中运行的小函数 当我运行时会抛出 ValueErrorif x in y陈述 我看到了类似的问题 建议使用布尔索引 isin and where 但我无法将任何示例适应我的情况 任何建议将非常感激 附加说明 gro
  • jQuery :包含 html

    我有一个表 其中包含逗号分隔的数字列表 如下所示 td 72 76 81 td 我正在尝试选择表格单元格don t包含特定的数字 该选择器有效 td not contains 76 table 问题是可能存在包含 576 或 761 等的行
  • 如何编写无分支 std::vector 扫描?

    我想对数组编写一个简单的扫描 我有一个std vector
  • CouchDB 视图:MapReduce 中可以接受多少处理?

    我一直在尝试使用 CouchDB 进行 MapReduce 一些示例显示了映射归约函数中可能存在的一些繁重逻辑 在一种特殊情况下 他们在映射内执行 for 循环 在发出您选择的文档之前 MapReduce 是否会在每个可能的文档上运行 如果
  • void Function(int) 不是 void Function(dynamic) 的有效重写

    class Parent
  • Powershell XML:属性是否存在会改变获取值的方式

    我在 Windows 8 PC 上使用 Powershell 3 0 我有一些简单的 XML 文件 其内容如下 没有 foobar 部分 稍后会出现
  • 将数据插入通过外键链接的表中

    我正在使用 PostgreSQL Customer Customer ID Name Order Order ID Customer ID Price 要插入订单 这是我通常需要做的 例如 John 下了 1 34 价格的订单 1 Get