优化Sql Query删除SELECT子句并使用JOIN

时间:2015-10-08 03:07:14

标签: mysql sql-server join left-join outer-join

不是SQL专家

我正在尝试提出一个SQL查询来对4个表进行JOIN。我正在使用MySQL,我有一个有效的查询但需要进行优化。

以下是我的四个表格:

客户

+--------------+---------+---
| id        | product_name   |
+--------------+---------+---

顺序

+--------------+---------+
| customer_id  | order_id|
+--------------+---------+

CUSTOMER_ORDER

+--------------+----
| type_id   | type | 
+--------------+----

的customer_type

Select

解决方案1:

这是我可以提出并运行的mysql查询。但它之间有一个JOIN条款,我不喜欢它。我想用SELECT DISTINCT c.id AS cus_id, c.email, c.phone, c.zip, c.last_name, c.first_name, coo.product_name, ct.type AS cus_type FROM customer c LEFT OUTER JOIN (SELECT o.product_name, co.customer_id FROM customer_order co, order o WHERE co.customer_id = o.id) coo ON coo.customer_id = c.id JOIN customer_type ct ON ct.type_id = c.type_id 替换它并尝试了很多东西,但我收到了语法错误。

WHERE

解决方案2:

我重新考虑了上述查询,将JOIN条件部分替换为SELECT DISTINCT c.id AS cus_id, c.email, c.phone, c.zip, c.last_name, c.first_name, coo.product_name, ct.type AS cus_type FROM customer c LEFT OUTER JOIN (SELECT o.product_name, co.customer_id FROM customer_order co JOIN order o ON co.customer_id = o.id) coo ON coo.customer_id = c.id JOIN customer_type ct ON ct.type_id = c.type_id ,但这仍然与上述查询相同,按我的意愿运行。

SELECT

有人可以指导我如何用JOIN替换我正在使用的$mainQuery = new \Elastica\Query\BoolQuery(); $rangeFilter = new Filtered( $mainQuery, new Range('price', array( 'gte' => $min, 'lte' => $max )) ); $data = $finder->search($rangeFilter); 查询。

感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

试试这个.........

SELECT c.id AS cus_id, c.email, c.phone, c.zip, 
c.last_name, c.first_name, o.product_name, ct.type AS cus_type
FROM customer c
INNER JOIN customer_type ct ON ct.type_id = c.type_id
LEFT  JOIN customer_order co ON co.customer_id = c.id
LEFT  JOIN order o ON co.order_id = o.id