【发布时间】:2017-02-15 11:48:24
【问题描述】:
我正在尝试修改现有查询以使用条件 JOIN。
我有三个表:invoices、companies 和 clients。
应用程序逻辑是这样的:首先为每个订单创建一个数量清单。然后,我为该工程量清单创建一张发票。有时,下订单的客户与收到账单的客户不同(例如:来自 A+ 公司的客户 A 正在下订单,但来自 B+ 公司的客户 B 正在为该订单付费)。对于这种情况,我有 invoice_as_company_id 和 invoice_as_client_id 列。
现在我有一个获取所有发票的查询,它看起来像这样:
SELECT i.*, co.name AS company, cl.name AS client
FROM invoices i
LEFT JOIN companies co ON i.invoice_company_id = co.company_id
LEFT JOIN clients cl ON i.invoice_client_id = cl.client_id
ORDER BY i.invoice_date DESC
LIMIT 10
所以我想像这样修改这个查询:
- 如果
invoice_as_company_id为空,则使用invoice_company_id公司表中的字段连接 - 如果
invoice_as_client_id为空,则使用invoice_client_id字段 在客户表中加入
数据库表如下。
发票
+-----------------------+--------------+
| invoice_id | int(10) |
| invoice_date | date |
| invoice_number | int(11) |
| invoice_amount | decimal(5,2) |
| invoice_company_id | int(11) |
| invoice_client_id | int(11) |
| invoice_as_company_id | int(11) |
| invoice_as_client_id | int(11) |
| date_added | int(11) |
+-----------------------+--------------+
公司
+--------------+--------------+
| company_id | int(10) |
| company_name | varchar(255) |
| date_added | int(11) |
+--------------+--------------+
客户
+-------------+--------------+
| client_id | int(10) |
| client_name | varchar(255) |
| date_added | int(11) |
+-------------+--------------+
【问题讨论】:
标签: mysql join conditional