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
此查询提供结果
正如您在屏幕截图中看到的,我在突出显示的部分中只有一行,我想根据日期得到结果:
2014-02-03
2014-01-16
2014-01-16
2014-01-16
2014-01-16
2014-01-16
..........
但我每次都获得2014-02-03
日期(限制10)
答案 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 = 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 JOIN上,它们是可以互换的,优化器会随意重新排列它们。
在OUTER JOIN上,它们不一定是可互换的,具体取决于它们所依赖的连接的哪一侧。
答案 1 :(得分: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
这应仅返回左表中具有匹配的客户ID和发票日期的条目