我正在尝试加入 4 张 table 。目前我已经通过这样做实现了它。
SELECT columns
FROM tableA
LEFT OUTER JOIN tableB ON tableB.address_id = tableA.address_id
INNER JOIN tableC ON tableC.company_id = tableA.company_id AND tableC.client_id = ?
UNION
SELECT columns
FROM tableA
LEFT OUTER JOIN tableB ON tableB.address_id = tableA.gaddress_id
INNER JOIN tableD ON tableD.company_id = tableA.company_id AND tableD.branch_id = ?
tableC 和 tableD 的结构非常相似。假设 tableC 包含客户的数据。 tableD 包含客户分支的数据。表 A 是公司,表 B 是地址 我的目标是从表 A 中获取数据,这些数据连接到表 B(所有有地址的公司)以及表 D 和表 C 中的所有数据。
这很好,但我担心这会很慢。
最佳答案
我认为你可以这样欺骗它:
先UNION
C
之间, D
并且只有加入查询的其余部分,它应该显着改善查询:
SELECT columns
FROM TableA
LEFT OUTER JOIN tableB ON tableB.address_id = tableA.address_id
INNER JOIN(SELECT Columns,'1' as ind_where FROM tableC
UNION ALL
SELECT Columns,'2' FROM TableD) joined_Table
ON (joined_Table.company_id = tableA.company_id AND joined_Table.New_Col_ID= ?)
New_Col_ID
-> 只需同时选择branch_id
和 client_id
在同一列中并将其别名为 New_Col_ID
管他呢此外,您可以索引表(如果尚不存在):
TableA(address_id,company_id)
TableB(address_id)
TableC(company_id,client_id)
TableD(company_id,branch_id)
关于sql - 优化 SQL 查询 - 连接 4 个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37830249/