Oracle:无法从连接 table 中提取数据:单行子查询 returns 多于一行

Oracle: Can't pull from data from joined table: Single-row subquery returns more than one row

我有一个包含以下字段的 orders table。

order_id,
order_status_id,
ordered_date

我有一个包含以下字段的 shipments table。 (当我在 orders table 中将 order_status_id 更新为 3 时,我必须将 order_id and shipped_at 插入 shipments table。)

shipment_id,
order_id、
shipped_at

我想 select 全部来自 order_status_id 为 3 的订单。我还想从发货 table.

中获得 shipped_at

我的尝试是这样的:

SELECT 
    o.*, 
    s.shipped_at,
        FROM orders o
            JOIN shipments s ON s.order_id = o.order_id
        WHERE o.order_status_id = 3;

上面的结果是空的,但我确实有数据。

SELECT 
    s.*, 
    o.*, 
    FROM shipments s
        JOIN orders o ON o.order_id = s.order_id
    WHERE s.order_id = (SELECT o.order_id FROM orders o WHERE o.order_status_id = 3);

这给我 Single-row subquery returns more than one row 错误。

请帮忙。

该错误表示您的子查询 (select o.order_id...) returns 多于一行,但 = 恰好需要 1 行。如果您想接受多个结果,请改用 in。您还需要将子查询与主查询相关联。

SELECT 
    s.*, 
    o.*, 
    FROM shipments s
        JOIN orders o ON o.order_id = s.order_id
    WHERE s.order_id in (SELECT o.order_id FROM orders o WHERE o.order_status_id = 3 and o.order_id = s.order_id);

在这种情况下,您已经加入了 orders,因此您不需要子查询。您可以使用完整的外部联接排查丢失数据的原因。

SELECT 
    s.*, 
    o.*, 
    FROM shipments s
    FULL OUTER JOIN orders o ON o.order_id = s.order_id
    WHERE o.order_status_id = 3;