不是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);
查询。
感谢您的帮助。
答案 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