2014-10-03 108 views
-1

我遇到了與多個不同表對應的SQL查詢問題。我已經寫了下面的代碼,但它似乎將每個預訂與每張發票結合起來,而不是找到與特定預訂匹配的特定發票。任何幫助將不勝感激。複雜SQL代碼

$sql = "SELECT INVOICE.invoice_id, 
      g.guest_first_name, 
      g.guest_last_name, 
      g.booking_num_guests, 
      g.booking_num_nights, 
      CURRENCY.currency_name, 
      INVOICE.invoice_nightly_rate,  
      INVOICE.invoice_deposit_amount, 
      INVOICE.invoice_paid, 
      ACCOUNT.account_name 
     FROM INVOICE  
     INNER JOIN BOOKING 
      ON INVOICE.invoice_booking_id = BOOKING.booking_id 
     INNER JOIN CURRENCY 
      ON INVOICE.invoice_currency_id = CURRENCY.currency_id 
     INNER JOIN ACCOUNT 
      ON INVOICE.invoice_account_id = ACCOUNT.account_id 
     INNER JOIN (
      SELECT GUEST.guest_first_name, 
        GUEST.guest_last_name, 
        BOOKING.booking_num_guests, 
        BOOKING.booking_num_nights 
      FROM BOOKING 
      INNER JOIN GUEST 
       ON BOOKING.booking_guest_id = GUEST.guest_id) g 
       ON INVOICE.invoice_booking_id = BOOKING.booking_id"; 
+1

什麼是最後的內部連接?您已經在第一個內部聯接中加入了「INVOICE」和「BOOKING」。 – ekad 2014-10-03 17:22:37

+0

預訂表包含客人ID,我想我需要最後一個內部連接來獲取客人詳細信息。 – chrisalex2 2014-10-03 17:26:11

+0

爲什麼不用'SELECT GUEST.guest_first_name,GUEST.guest_last_name,BOOKING.booking_num_guests,BOOKING.booking_num_nights FROM BOOKING'來使用'ON BOOKING.booking_guest_id = GUEST.guest_id'來加入'GUEST'和'BOOKING'? – ekad 2014-10-03 17:29:48

回答

1

既然你已經在第一內加入INVOICEBOOKING表連接,最後的內部連接應該是BOOKINGGUEST表之間。將您的查詢改爲

$sql = "SELECT 
      INVOICE.invoice_id, 
      GUEST.guest_first_name, 
      GUEST.guest_last_name, 
      BOOKING.booking_num_guests, 
      BOOKING.booking_num_nights, 
      CURRENCY.currency_name, 
      INVOICE.invoice_nightly_rate, 
      INVOICE.invoice_deposit_amount, 
      INVOICE.invoice_paid, 
      ACCOUNT.account_name 
     FROM INVOICE  
     INNER JOIN BOOKING 
      ON INVOICE.invoice_booking_id = BOOKING.booking_id 
     INNER JOIN CURRENCY 
      ON INVOICE.invoice_currency_id = CURRENCY.currency_id 
     INNER JOIN ACCOUNT 
      ON INVOICE.invoice_account_id = ACCOUNT.account_id 
     INNER JOIN GUEST 
      ON BOOKING.booking_guest_id = GUEST.guest_id";