2014-10-03 81 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";