sql - View in MYSQL with 3 tables -
i have 3 tables in mysql
table 1 date name total recieve 2013-05-09 "aa" 20 15 2013-05-09 "bb" 10 17 table 2 name tree "bb" "a1" "aa" "a2" table 3 date tree users 2013-05-09 "a1si" 19 2013-05-09 "a1no" 24 2013-05-09 "a2si" 39 2013-05-09 "a2no" 22
i need view tree tables
this view need:
date name tree total recieve usersi userno 2013-05-09 "aa" "a2" 20 15 39 22 2013-05-09 "bb" "a1" 10 17 19 24
i have half of query
select t1.`date` , t1.`name` , t2.`tree` , t1.`total` , t1.`recieve`, `table1` t1 inner join `table2` t2 on t1.`name` = t2.`name` order `t1`.`date` desc
but don't know how view 3 tables , other problems records of tree because have tree "a1" , "a1si" , "a2no" , in view need relate 3 columns
you should able use following joins table3
on t2.tree
, left 2 characters of t3.tree
:
select t1.`date` , t1.`name` , t2.`tree` , t1.`total` , t1.`recieve`, max(case when right(t3.tree, 2) = 'si' t3.users end) userssi, max(case when right(t3.tree, 2) = 'no' t3.users end) usersno `table1` t1 inner join `table2` t2 on t1.`name` = t2.`name` inner join `table3` t3 on t2.tree = left(t3.tree, 2) group t1.`date` , t1.`name` , t2.`tree` , t1.`total` , t1.`recieve` order `t1`.`date` desc;
see sql fiddle demo.
this done using multiple joins on table3
:
select t1.`date` , t1.`name` , t2.`tree` , t1.`total` , t1.`recieve`, t3si.users userssi, t3no.users usersno `table1` t1 inner join `table2` t2 on t1.`name` = t2.`name` left join `table3` t3si on t2.tree = left(t3si.tree, 2) , right(t3si.tree, 2) = 'si' left join `table3` t3no on t2.tree = left(t3no.tree, 2) , right(t3no.tree, 2) = 'no' order `t1`.`date` desc;
see sql fiddle demo. notice altered last 2 joins use left join
in event tree not exist matches si
or no
, return data. if know have matching data, can use inner join.
if have tree names longer, implement clause in join:
select t1.`date` , t1.`name` , t2.`tree` , t1.`total` , t1.`recieve`, t3si.users userssi, t3no.users usersno `table1` t1 inner join `table2` t2 on t1.`name` = t2.`name` left join `table3` t3si on t3si.tree concat(t2.tree, '%') , right(t3si.tree, 2) = 'si' left join `table3` t3no on t3no.tree concat(t2.tree, '%') , right(t3no.tree, 2) = 'no' order `t1`.`date` desc;
see sql fiddle demo
Comments
Post a Comment