Mysql查询加入5个表
Posted
技术标签:
【中文标题】Mysql查询加入5个表【英文标题】:Mysql query joining 5 tables 【发布时间】:2020-01-23 10:12:20 【问题描述】:我正在尝试加入 5 个表格,在这些表格中,我希望根据相同的合同 ID 在不同的表格中提及不同的货币。 当我加入任何三个表时,它会给我结果,但是当我在查询中添加一个表时 服务器变得无响应,直到我不得不终止进程。
请帮助我在哪里做错了。
SELECT c.department_id,
c.contract_id,
c.seller_id,
c.buyer_id,
c.contract_ratecurrency AS contractcurrency,
b.currency_id AS billcurrency,
s.saleinv_currency AS saleinvcurrency,
cm.currency_id AS commissioncurrency,
sl.currency_id AS cmlogcurrency,
c.contract_iscancel
FROM tbl_contracts C
JOIN tbl_contract_bill b ON c.contract_id=b.contract_id
JOIN tbl_contract_saleinvoice s ON c.contract_id =s.contract_id
JOIN tbl_commission_payment cm ON c.department_id = cm.department_id
JOIN tbl_saleinvoice_commission_log sl ON c.department_id = sl.department_id
WHERE (c.contract_ratecurrency <> s.saleinv_currency
OR c.contract_ratecurrency <> b.currency_id
OR s.saleinv_currency <> b.currency_id
OR cm.currency_id <> sl.currency_id
OR c.contract_ratecurrency <> cm.currency_id
OR s.saleinv_currency <> cm.currency_id
OR b.currency_id <> cm.currency_id)
AND (c.contract_iscancel =0)
requried result should be
ccontractid,csellerid,cbuyerid,ccurrency,bcurrency,scurrency,cmcurrency,slcurrency
101,25,50,1,1,2,3,1
102,28,16,2,3,1,3,2
【问题讨论】:
你能解释一下这个查询的目的吗? 实际上我想在所有 5 个表中获得货币差异 请阅读此meta.***.com/questions/271055/… 特别注意查询性能部分。然后,请通过editing 向我们提供更多信息。 您要添加什么条件?有关表格大小和类型的信息也会有所帮助。 请提供EXPLAIN SELECT ..
【参考方案1】:
您似乎遇到了性能问题。要优化您的数据库结构,您有多种选择:
在您的键上添加索引。
让我们看看你的加入声明:
加入 tbl_saleinvoice_commission_log sl ON c.department_id = sl.department_id
在 department_id 上添加聚集索引 tbl_saleinvoice_commission_log 表将帮助你很多 表现明智。更多信息可以查看this链接。
分区是另一种提高性能的方法,但您需要检查您的数据库结构,看看它是否适合您。更多信息可以查看this链接。
另外,我相信您的表格是一对多的,因此您可能需要检查您尝试检索的行数。如果您的数据库服务器无法处理大量行,您可能需要改进数据库守护程序的硬件或 CPU 使用限制。
【讨论】:
不要在PARTITIONing
上浪费时间;它对那个查询没有帮助。以上是关于Mysql查询加入5个表的主要内容,如果未能解决你的问题,请参考以下文章
从 6 个表构建一个 mysql 查询以减少 php 的使用