【发布时间】:2016-01-05 11:49:50
【问题描述】:
不是 SQL 专家
我正在尝试提出一个 SQL 查询来对 4 个表进行 JOIN。我正在使用 MySQL,我有一个有效的查询,但它需要优化。
这是我展示的四个表:
客户
+--------------+---------+------+-----+---------+----------------+-------+
| id | first_name | last_name | email | zip | phone | type_id |
+--------------+---------+------+-----+---------+----------------+-------+
订购
+--------------+---------+---
| id | product_name |
+--------------+---------+---
客户订单
+--------------+---------+
| customer_id | order_id|
+--------------+---------+
客户类型
+--------------+----
| type_id | type |
+--------------+----
解决方案 1:
这是我可以想出并有效的 mysql 查询。但它之间有一个Select 子句,我不喜欢它。我想用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
解决方案 2:
我重构了上面的查询,用JOIN 部分替换了WHERE 条件,但这仍然与上面的查询相同,可以按我的意愿工作。
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
有人可以指导我如何用JOIN 替换我在两者之间使用的SELECT 查询。
感谢您的帮助。
【问题讨论】:
标签: mysql sql-server join left-join outer-join