You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BigQuery:关联订单与发票并整合关联订单费用的查询实现

关联订单表与发票表,获取主订单及关联订单的全部费用

示例表

订单表(Orders Table)

order_idlinked_order1linked_order2
1001L005null
1002nullnull
1003L006L007

发票表(Invoices Table)

order_idlinked_order_idcharge
1001null4.27
1002null9.82
1003null7.42
nullL0052.12
nullL0061.76
nullL0073.20

需求与期望输出

需要将两张表关联,让主订单及其关联订单的所有费用都显示在对应的主订单行中,期望输出如下:

期望输出

order_idlinked_order1linked_order2invoices.chargeinvoices.order_idinvoices.linked_order_id
1001L005null4.271001null
2.12nullL005
1002nullnull9.82nullnull
1003L006L0077.42nullnull
1.76nullL006
3.20nullL007

尝试过程

最初仅能查询出主订单对应的发票,SQL语句如下:

SELECT
  orders,
  ARRAY(
  SELECT AS STRUCT * FROM `invoices_table` WHERE order=orders.order_id) AS invoice
FROM
  `orders_table` AS orders

尝试用UNION子查询整合主订单及关联订单的发票时,触发了关联子查询错误,语句如下:

SELECT
  orders,
  ARRAY(
  SELECT AS STRUCT * FROM 
(SELECT * FROM `invoices_table` WHERE order=orders.order_id
    UNION ALL SELECT * FROM `invoices_table` WHERE linked_order_id=orders.linked_order1
    UNION ALL SELECT * FROM `invoices_table` WHERE linked_order_id=orders.linked_order2)
) AS invoice
FROM
  `orders_table` AS orders

解决方案

实际更简单的写法可以实现需求,通过OR和IN条件匹配主订单ID或关联订单ID,避免子查询嵌套带来的问题:

SELECT
  orders,
  ARRAY(
  SELECT AS STRUCT * FROM `invoices_table` WHERE order=orders.order_id OR linked_order_id IN(orders.linked_order1, orders.linked_order2)) AS invoice
FROM
  `orders_table` AS orders

内容的提问来源于stack exchange,提问作者mister_b

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 11:36:29