![](/img/trans.png)
[英]How do I select data from one table where column values from that table match the conatenated column values of another table?
[英]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.