2014-02-06 67 views
0
SELECT i.invoice_date inv, 
     i.invoice_id, 
     i.total_amount, 
     oi.invoice_date oi_inv, 
     oi.offline_invoice_number, 
     oi.invoice_amount 
    FROM ci_invoices i 
       LEFT JOIN ci_offline_invoice oi 
         ON oi.customer_id = 9 
    WHERE i.customer_id = 9 
ORDER BY i.invoice_date 
    LIMIT 10 

此查询给出的结果迷茫中连接查询

enter image description here

正如你在截图我在突出显示部分只有一行看到,我想根据最新结果:

2014-02-03 
2014-01-16 
2014-01-16 
2014-01-16 
2014-01-16 
2014-01-16 
.......... 

,但我得到每次日期2014-02-03(限10)

+0

请只项,提供的表格中的详细信息。目前还不清楚,您想如何订购结果,仅限日期,还是日期时间。 – Alexander

+0

因为你加入customerid = 9它会从'oi'表中为'i'表中的每个条目返回1行' – Milen

+0

@MilenPavlov我刚刚解决问题,是否有任何方法根据最高日期?因为它可能在'我'表或'oi'表中? –

回答

0

尝试这样

SELECT i.invoice_date inv, 
     i.invoice_id, 
     i.total_amount, 
     oi.invoice_date oi_inv, 
     oi.offline_invoice_number, 
     oi.invoice_amount 
    FROM ci_invoices i 
       LEFT JOIN ci_offline_invoice oi 
         ON oi.customer_id = i.customer_id 
    WHERE i.customer_id = 9 
ORDER BY i.invoice_date 
    LIMIT 10 

**编辑**

他们是不一样的东西。

考虑这些查询:

SELECT i.invoice_date inv, 
     i.invoice_id, 
     i.total_amount, 
     oi.invoice_date oi_inv, 
     oi.offline_invoice_number, 
     oi.invoice_amount 
    FROM ci_invoices i 
       LEFT JOIN ci_offline_invoice oi 
         ON oi.customer_id = i.customer_id 
    WHERE i.customer_id = 9 
ORDER BY i.invoice_date 
    LIMIT 10 

SELECT i.invoice_date inv, 
     i.invoice_id, 
     i.total_amount, 
     oi.invoice_date oi_inv, 
     oi.offline_invoice_number, 
     oi.invoice_amount 
    FROM ci_invoices i 
       LEFT JOIN ci_offline_invoice oi 
         ON oi.customer_id = 9 
    WHERE i.customer_id = 9 
ORDER BY i.invoice_date 
    LIMIT 10 

首先将返回ci_invoices及其线路,如果有的话, CUSTOMER_ID = 9。

第二个将返回所有ci_invoices,但只有customer_id 9将 有任何与其关联的行。

在INNER JOINs上它们是可以互换的,优化器会随意重新排列它们。

在外部连接上,它们不一定是可以互换的,这取决于它们依赖于连接的哪一侧。

+0

我得到了相同的结果:(,是否有任何区别'oi.customer_id = i.customer_id'而不是'oi.customer_id = 9',因为它是相同的? –

+0

感谢您的信息,我只是靠近解决问题,是否有任何方法根据最高日期来缩短数据?因为它可能位于'i'表或'oi'表中,因为'ORDER BY i.invoice_date'不能相应地工作 –

+0

我不能解决你的问题 –

0

你可以加入的日期太:

SELECT i.invoice_date inv, 
      i.invoice_id, 
      i.total_amount, 
      oi.invoice_date oi_inv, 
      oi.offline_invoice_number, 
      oi.invoice_amount 
     FROM ci_invoices i 
        LEFT JOIN ci_offline_invoice oi 
          ON oi.customer_id = 9 and date(i.invoice_date) = oi.invoice_date 
     WHERE i.customer_id = 9 
    ORDER BY i.invoice_date 
     LIMIT 10 

这将返回左表中的那些客户编号和发票日期