多个行和表达式

INSERT 语句的其他主要形式以 SELECT 语句替代 VALUES 子句。此特性允许您插入下列数据:
  • 仅用一条语句处理多个行(每当 SELECT 语句返回一行,就插入一行)
  • 计算值(VALUES 子句仅允许常量),由于 projection 列表可包含表达式
例如,假设对于已付款但尚未装运的每个订单都需要电话跟进。下列示例中的 INSERT 语句找到那些订单并为每一订单在 cust_calls 中插入一行:
INSERT INTO cust_calls (customer_num, call_descr)
          SELECT customer_num, order_num FROM orders
          WHERE paid_date IS NOT NULL
          AND ship_date IS NULL;

此 SELECT 语句返回两列。将来自这些列的数据(在每一选择了的行中)插入到 cust_calls 表的命名了的列内。然后,将(来自 SERIAL 列 order_num 的)订单编号插入到呼叫描述,这是一个字符列。请记住,数据库服务器允许您将整数值插入到字符列内。它自动地将序列编号转换为十进制数字的字符串。