Advertisement
Guest User

Untitled

a guest
Jul 20th, 2017
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.67 KB | None | 0 0
  1. drop table if exists tab2\\
  2. drop table if exists tab1\\
  3.  
  4. create table tab1 (id int not null auto_increment primary key, name text)\\
  5. create table tab2 (id2 int not null auto_increment primary key, important_data text, parent_id int,
  6. foreign key (parent_id) references tab1(id) on delete cascade)\\
  7.  
  8. insert into tab1(name) values('parent one')\\
  9. insert into tab1(name) values('parent two')\\
  10. insert into tab1(name) values('parent three')\\
  11.  
  12. insert into tab2(important_data, parent_id) values('one child one', 1)\\
  13. insert into tab2(important_data, parent_id) values('two child one', 1)\\
  14. insert into tab2(important_data, parent_id) values('three child one', 1)\\
  15. insert into tab2(important_data, parent_id) values('four child one', 1)\\
  16. insert into tab2(important_data, parent_id) values('one child two', 2)\\
  17. insert into tab2(important_data, parent_id) values('two child two', 2)\\
  18. insert into tab2(important_data, parent_id) values('three child two', 2)\\
  19. insert into tab2(important_data, parent_id) values('four child two', 2)\\
  20. insert into tab2(important_data, parent_id) values('one child three', 3)\\
  21. insert into tab2(important_data, parent_id) values('two child three', 3)\\
  22. insert into tab2(important_data, parent_id) values('three child three', 3)\\
  23. insert into tab2(important_data, parent_id) values('four child three', 3)\\
  24.  
  25. select id2, important_data, parent_id, (@num:=if(@parent_id=parent_id, @num+1, if(@parent_id:=parent_id, 1, 1))) row_number
  26. from tab2
  27. cross join (select @num:=0, @parent_id:=null) c
  28. order by parent_id, id2, important_data\\
  29.  
  30.  
  31. select tab1.id, tab1.name, data1.id2, data1.parent_id, data1.important_data as data_one
  32. , data2.important_data as data_two, data3.important_data as data_three
  33. from tab1
  34. left outer join
  35. (
  36. select id2, important_data, parent_id, (@num:=if(@parent_id=parent_id, @num+1, if(@parent_id:=parent_id, 1, 1))) row_number
  37. from tab2
  38. cross join (select @num:=0, @parent_id:=null) c
  39. order by parent_id, id2, important_data
  40. ) as data1 on data1.parent_id = tab1.id and data1.row_number=1
  41. left outer join
  42. (
  43. select id2, important_data, parent_id, (@num:=if(@parent_id=parent_id, @num+1, if(@parent_id:=parent_id, 1, 1))) row_number
  44. from tab2
  45. cross join (select @num:=0, @parent_id:=null) c
  46. order by parent_id, id2, important_data
  47. ) as data2 on data2.parent_id = tab1.id and data2.row_number=2
  48. left outer join
  49. (
  50. select id2, important_data, parent_id, (@num:=if(@parent_id=parent_id, @num+1, if(@parent_id:=parent_id, 1, 1))) row_number
  51. from tab2
  52. cross join (select @num:=0, @parent_id:=null) c
  53. order by parent_id, id2, important_data
  54. ) as data3 on data3.parent_id = tab1.id and data3.row_number=3\\
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement