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;
我有一个包含以下字段的 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;