mysql之新手4表联查

需求:查询平台用户邀请人的投资记录

思路:先是多表联查出结果,然后优化SQL

tb_fund_user 用户表,

tb_p2p_orderitem 订单详情 (订单详情是用户表,订单表,产品表的关联关系表)

tb_p2p_order  订单表 

tb_p2p_product 产品表

SQL语句:

SELECT r.`name` AS 用户名,
    r.`tel` AS 手机号码,
    o.`order_amount` AS 投资金额,
    o.`order_time` AS 投资时间,
    p.`product_valid_period` AS 投资期限
FROM fpfund.`tb_fund_user` r,fp2p.`tb_p2p_orderitem` m,fp2p.tb_p2p_order o,fp2p.tb_p2p_product p
WHERE m.`order_id` = o.`ID` AND m.`product_id` = p.`ID` AND m.`custom_i_d` = r.`id`
AND r.id IN(SELECT u.`id` FROM fpfund.`tb_fund_user` u WHERE u.`referee_id`='此处省略用户的邀请人ID')
AND p.`sell_status` !='7'

优化后 SQL:

SELECT r.`name` AS 用户名,
r.`tel` AS 手机号码,
o.`order_amount` AS 投资金额,
o.`order_time` AS 投资时间,
o.`product_valid_period` AS 投资期限
FROM fpfund.`tb_fund_user` r
LEFT JOIN(
SELECT m.`custom_i_d`,
`order_amount`,
o.`order_time`,
p.`product_valid_period`
FROM `tb_p2p_orderitem` m,tb_p2p_order o,tb_p2p_product p
WHERE m.`order_id` = o.`ID` AND m.`product_id` = p.`ID`
AND p.`sell_status` !='7'
) o
ON r.`id` = o.custom_i_d
WHERE r.`referee_id`='此处省略用户的邀请人ID' AND o.custom_i_d IS NOT NULL

 

 换个思路优化后 SQL:

SELECT r.`name` AS 用户名,
r.`tel` AS 手机号码,
o.`order_amount` AS 投资金额,
o.`order_time` AS 投资时间,
p.`product_valid_period` AS 投资期限
FROM `tb_p2p_orderitem` m,tb_p2p_order o,tb_p2p_product p,
(SELECT u.id,u.name,u.tel
FROM fpfund.`tb_fund_user` u
WHERE u.`referee_id` = '此处省略用户的邀请人ID'
) r
WHERE m.`order_id` = o.`ID`
AND m.`product_id` = p.`ID`
AND m.`custom_i_d` = r.`id`
AND p.`sell_status` != '7'

 

posted @ 2017-03-11 10:26  我想静静灬  阅读(273)  评论(0)    收藏  举报