簡體   English   中英

如何從另一個表列中選擇一個表?

[英]How do I select a table from another table column?

我在一個場地有一張座位表,但有多個場地。 我可以為每個座位旁邊的每個場地創建一個帶有 id 的長桌,但這可以制作一個 2000 長的場地和座位混合桌。 所以我想我會為每個場地創建一張桌子,里面有自己的座位。 如:

tickets

id | venue_name | seat_id

venueA

seat_id    | section    |    row | seat_number

所以我想從venue_name(“venueA”)和seat_id中選擇場地表。

SELECT seat_id from (select venue from tickets(venue_name));

我試圖捕獲的是場地的座位 ID,所以我知道正在請求哪個部分、行和座位。 每個場地的部分、行和座位信息以及座位數量可能不同。

我需要能夠識別 VenueA 的座位,同時將其與 VenueB 的同一個座位分開。

如果這是有道理的。 這是我第一次嘗試做 sql,超越簡單的設計和與其他人工作的接口。 具體來說,我正在使用 postgresql。

您的設計做得不好,這就是您遇到此問題的原因。 您應該簡單地擁有一張場地表,而不是為每個場地配備單獨的桌子。 座位表然后可以具有場地ID以及座位信息。 就像是:

Venues (venue_id, venue_name, etc.)
Seats (venue_id, seat_id, section, row, seat_number)
Tickets (venue_id, seat_id, ticket_id, etc.)

您可能只想擁有一個與您的事件相關的“event_id”,而不是“ticket_id”,假設您的系統沒有任何奇怪的業務需求,它應該唯一標識任何票證。 如果適用,還要考慮非預訂座位的可能性 - 機票實際上可能不適用於“座位”。 這也會改變表的架構。

如果您要進行更多此類數據庫設計,那么您絕對應該花時間閱讀數據庫設計和規范化。 這不是一件小事,糟糕(或良好)的數據庫設計對軟件開發的影響是巨大的

我會建議一個架構,其中包含諸如 Venue、Seat、Event 和 Ticket 之類的表。 我會對Ticket 進行建模,使其具有EventId 和SeatId,一個Event 將包含一個VenueId,一個座位也將包含一個VenueId。

--- 編輯以包括有關測試的解釋 ---

如果這聽起來有貶義,請道歉,但您可以使用 PostGre 中的 Explain 來檢查查詢的性能並在適當的時候進行優化。 我會用虛擬數據加載數據庫,開始時可能在子表中的 EventId 和 VenueId 上有索引。 EXPLAIN 的文檔在這里http://www.postgresql.org/docs/8.1/static/sql-explain.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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