我正在嘗試運行以下查詢:
SELECT customers.id, customers.name, o.order_date
FROM customers,
(SELECT id,
order_date
FROM orders ORDER BY order_date DESC) as o
WHERE o.id = (
SELECT id
FROM o
WHERE customer_id = customers.id
LIMIT 1)
ORDER BY customer_id;
但是它導致錯誤
relation "o" does not exist
我知道它上面的子查詢的別名存在問題,但我不知道如何解決它。我沒有在 WHERE 子句中直接參考“訂單”表的原因是因為我想通過創建一個只有 2 個有序列的子查詢來優化它,所以每次在 WHERE 中進行比較時,都不會在整個表上執行此查詢條款已制定(它是如何作業的?)。
還有其他方法可以撰寫此查詢嗎?
uj5u.com熱心網友回復:
這不是您的查詢的唯一問題 - 您還參考customer_id了您沒有從orders. 一旦你解決了這個問題并將你的子查詢移動到CTE,它就會起作用:
with o as (
SELECT
id,
customer_id,
order_date
FROM orders
ORDER BY order_date DESC)
SELECT
customers.id,
customers.name,
o.order_date
FROM customers,
o
WHERE o.id = (
SELECT id
FROM o
WHERE o.customer_id = customers.id
LIMIT 1)
ORDER BY customer_id;
演示
編輯:
當我加入這些表時,我只想加入基于日期的訂單表中的第一個匹配項(最近的一個)
MAX()足以獲得客戶及其最近的訂單日期。
SELECT
c.id,
c.name,
max(o.order_date) as most_recent_order_date
FROM customers c
left join orders o
on o.customer_id=c.id
group by c.id, c.name
ORDER BY c.id;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/528819.html
上一篇:遍歷表以查找子字串
