在mysql中使用条件连接连接三个表

snz8szmq  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(384)

我正在尝试修改和现有查询以使用条件联接。
我有三张table: 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 companies表join中的字段
如果 invoice_as_client_id 为空,则使用 invoice_client_id clients表join中的字段
数据库表如下。
发票

+-----------------------+--------------+
| 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)      |
+-------------+--------------+
pieyvz9o

pieyvz9o1#

LEFT JOIN companies co ON co.company_id=IFNULL(i.invoice_company_as_id, i.invoice_company_id) 如果您有更具体的测试用例: LEFT JOIN companies co ON co.company_id=IF(i.invoice_company_as_id IS NULL OR i.invoice_company_as_id = 0, i.invoice_company_as_id, i.invoice_company_id) 你的第二个案子也是。表演可能会消失在沉重的table上。。。

相关问题