[英]How to use column derived from SELECT subquery elsewhere in SQL query
我有兩個看起來像這樣的數據庫表:
+----------+ +------------------+
| Bookings |----->| Booking_Statuses |
+----------+ +------------------+
語境:
Booking_Statuses
用於保留預訂可以經歷的各個階段的歷史記錄,例如PENDING
或ACCEPTED
,因此我可以為預訂構建事件時間表。 一個Booking
有多個Booking_Statuses
。我正在嘗試查詢特定用戶的預訂及其最新狀態:
SELECT "bookings".*,
(
SELECT "status"
FROM "booking_statuses"
WHERE "bookings"."id" = "booking_statuses"."booking_id"
ORDER BY "created_at" DESC
LIMIT 1
) AS "last_status"
FROM "bookings"
WHERE "user_id" = $1
AND "last_status" IN ('PENDING', 'APPROVED')
這一切都很好,直到我添加最后一行 - AND "last_status" IN ('PENDING', 'APPROVED')
,此時我收到錯誤: column "last_status" does not exist
。
如何在 SELECT 子查詢之外使用last_status
?
嘗試這樣的事情
SELECT bookings.*,
status as last_status
FROM bookings
INNER JOIN booking_statuses
ON id = booking_id
WHERE user_id = $1
AND last_status IN ( 'PENDING', 'APPROVED' )
ORDER BY created_at DESC
LIMIT 1
你能用這樣的東西嗎? 您找到最新的狀態 ID,然后將其加入預訂,然后您可以獲得所需的字段。
SELECT B.*, BB."status"
FROM "bookings" B
JOIN "booking_statuses" BB ON BB.id = (SELECT id
FROM "booking_statuses"
WHERE B."id" = "booking_statuses"."booking_id"
ORDER BY "created_at" DESC
LIMIT 1)
WHERE "user_id" = $1
AND BB."status" IN ('PENDING', 'APPROVED')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.