簡體   English   中英

如何在 SQL 查詢的其他地方使用從 SELECT 子查詢派生的列

[英]How to use column derived from SELECT subquery elsewhere in SQL query

我有兩個看起來像這樣的數據庫表:

+----------+      +------------------+
| Bookings |----->| Booking_Statuses |
+----------+      +------------------+

語境:

  • Booking_Statuses用於保留預訂可以經歷的各個階段的歷史記錄,例如PENDINGACCEPTED ,因此我可以為預訂構建事件時間表。 一個Booking有多個Booking_Statuses
  • 我正在使用 PostgreSQL。

我正在嘗試查詢特定用戶的預訂及其最新狀態:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM