簡體   English   中英

在 MYSQL 中加入同一個表兩次

[英]Joining the same table twice in MYSQL

我正在嘗試創建一個 MYSQL 查詢,該查詢從一系列表中提取數據。 我有一個主預訂表和一個發票表,我在其中記錄來自 Stripe 的發票 ID 等。

我為每個預訂存儲了兩張發票; 一是定金,二是最后余額。

然后在我的管理后端中,我向管理員顯示發票是否已支付等信息,因此需要從 SQL 中提取數據來顯示這一點。

我在這里遵循一些先前的指導兩次加入同一張桌子的最佳方式是什么? .

我的查詢正在返回數據,但是當發票表包含兩次(給我存款和余額發票)時,列名是相同的。

有人能指出我正確的方向嗎? 我想我需要以某種方式重命名第二張退回發票上的列??? 對不起,除了基本的 SQL 查詢之外的任何東西都是新手。

這是我的 SQL

SELECT * FROM bookings 
INNER JOIN voyages ON bookings.booking_voyageID = voyages.voyage_id 
LEFT JOIN emailautomations ON bookings.booking_reference = emailautomations.automation_bookingRef AND emailautomations.automation_sent != 1 
LEFT JOIN invoices ON bookings.booking_stripeDepositInvoice = invoices.invoice_id 
LEFT JOIN invoices inv2 ON bookings.booking_stripeBalanceInvoice = inv2.invoice_id

感謝@Algef Almocera 的回答,我已經修改了我的 SQL (並且通過使用 SELECT * 不再懶惰,能夠將列的負載減少到不多!)

SELECT
        bookings.booking_status,
        bookings.booking_reference,
        bookings.booking_stripeCustomerReference,
        bookings.booking_stripeDepositInvoice,
        bookings.booking_stripeBalanceInvoice,
        bookings.booking_totalPaid,
        bookings.booking_voyageID,
        bookings.booking_firstName,
        bookings.booking_lastName,
        bookings.booking_contractName,
        bookings.booking_contractEmail,
        voyages.voyage_id,
        voyages.voyage_name,
        voyages.voyage_startDate,
        depositInvoice.invoice_id AS depositInvoice_id,
        depositInvoice.invoice_status AS depositInvoice_status,
        balanceInvoice.invoice_id AS balanceInvoice_id,
        balanceInvoice.invoice_status AS balanceInvoice_status
      FROM bookings
      INNER JOIN voyages ON bookings.booking_voyageID = voyages.voyage_id
      LEFT JOIN emailautomations ON bookings.booking_reference = emailautomations.automation_bookingRef AND emailautomations.automation_sent != 1
      LEFT JOIN invoices depositInvoice ON bookings.booking_stripeDepositInvoice = depositInvoice.invoice_id
      LEFT JOIN invoices balanceInvoice ON bookings.booking_stripeBalanceInvoice = balanceInvoice.invoice_id

有時,這是無法避免的,因為關鍵字實際上可能通常是相同的,但每個表的目的不同。 為了幫助解決這個問題,您可以使用aliases 例如:

SELECT 
invoices.column_name AS invoices_column_name,
transactions.column_name AS transactions_column_name
FROM invoices ... 
LEFT JOIN transactions ...

暫無
暫無

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

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