left_join_stacks.yy 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. # Copyright Materialize, Inc. and contributors. All rights reserved.
  2. #
  3. # Use of this software is governed by the Business Source License
  4. # included in the LICENSE file at the root of this repository.
  5. #
  6. # As of the Change Date specified in that file, in accordance with
  7. # the Business Source License, use of this software will be governed
  8. # by the Apache License, Version 2.0.
  9. explain:
  10. EXPLAIN query
  11. ;
  12. query:
  13. SELECT
  14. ft.ft_col AS c01,
  15. ft.ft_col AS c02,
  16. dim_alias.dx_col AS c03,
  17. dim_alias.dx_col AS c04,
  18. dim_alias.dx_col AS c05,
  19. dim_alias.dx_col AS c06,
  20. dim_alias.dx_col AS c07,
  21. dim_alias.dx_col AS c08,
  22. dim_alias.dx_col AS c09,
  23. dim_alias.dx_col AS c10
  24. FROM
  25. star.ft as ft
  26. left_join1
  27. left_join2
  28. left_join3
  29. left_join4
  30. left_join5
  31. left_join6
  32. WHERE
  33. where_clause
  34. ORDER BY
  35. c01, c02, c03, c04, c05, c06, c07, c08, c09, c10
  36. ;
  37. where_clause:
  38. true | true | true | true | true
  39. | ft.ft_col IS NOT NULL bool_op where_clause
  40. | ft.ft_col > 1 bool_op where_clause
  41. | dim_alias.dx_col < 7 bool_op where_clause
  42. ;
  43. bool_op:
  44. AND | AND | AND | AND | AND
  45. | OR
  46. ;
  47. dim_alias:
  48. d1
  49. | d2
  50. | d3
  51. | d4
  52. | d5
  53. | d6
  54. ;
  55. ft_col:
  56. k
  57. | v
  58. | fk1
  59. | fk2
  60. ;
  61. dx_col:
  62. v
  63. | pk1
  64. | pk2
  65. ;
  66. fk_col:
  67. fk1
  68. | fk2
  69. ;
  70. pk_col:
  71. k1
  72. | k2
  73. ;
  74. dim_table:
  75. star.d1
  76. | star.d2
  77. | star.d3
  78. | star.d1_pk
  79. | star.d2_pk
  80. | star.d3_pk
  81. ;
  82. left_join1:
  83. # Join against ft:
  84. LEFT JOIN dim_table AS d1 ON( ft.fk1 = d1.pk1 )
  85. | LEFT JOIN dim_table AS d1 ON( ft.fk1 = d1.pk1 AND ft.fk2 = d1.pk2 )
  86. | LEFT JOIN dim_table AS d1 ON( ft.fk1 = d1.pk2 AND ft.fk2 = d1.pk1 )
  87. | LEFT JOIN dim_table AS d1 ON( ft.fk1 = d1.pk1 AND ft.fk1 = d1.pk2 )
  88. ;
  89. left_join2:
  90. # Join against ft:
  91. LEFT JOIN dim_table AS d2 ON( ft.fk1 = d2.pk1 )
  92. | LEFT JOIN dim_table AS d2 ON( ft.fk1 = d2.pk1 AND ft.fk2 = d2.pk2 )
  93. | LEFT JOIN dim_table AS d2 ON( ft.fk1 = d2.pk2 AND ft.fk2 = d2.pk1 )
  94. | LEFT JOIN dim_table AS d2 ON( ft.fk1 = d2.pk1 AND ft.fk1 = d2.pk2 )
  95. # Join against d1:
  96. | LEFT JOIN dim_table AS d2 ON( d1.pk1 = d2.pk1 )
  97. | LEFT JOIN dim_table AS d2 ON( d1.pk1 = d2.pk1 AND d1.pk2 = d2.pk2 )
  98. | LEFT JOIN dim_table AS d2 ON( d1.pk1 = d2.pk2 AND d1.pk2 = d2.pk1 )
  99. | LEFT JOIN dim_table AS d2 ON( d1.pk1 = d2.pk1 AND d1.pk1 = d2.pk2 )
  100. ;
  101. left_join3:
  102. # Join against ft:
  103. LEFT JOIN dim_table AS d3 ON( ft.fk1 = d3.pk1 )
  104. | LEFT JOIN dim_table AS d3 ON( ft.fk1 = d3.pk1 AND ft.fk2 = d3.pk2 )
  105. | LEFT JOIN dim_table AS d3 ON( ft.fk1 = d3.pk2 AND ft.fk2 = d3.pk1 )
  106. | LEFT JOIN dim_table AS d3 ON( ft.fk1 = d3.pk1 AND ft.fk1 = d3.pk2 )
  107. | LEFT JOIN dim_table AS d3 ON( ft.fk1 = d3.pk1 AND ft.fk2 = d3.pk1 ) # VOJ lowering for this is excluded in materialize#26709
  108. # Join against d1:
  109. | LEFT JOIN dim_table AS d3 ON( d1.pk1 = d3.pk1 )
  110. | LEFT JOIN dim_table AS d3 ON( d1.pk1 = d3.pk1 AND d1.pk2 = d3.pk2 )
  111. | LEFT JOIN dim_table AS d3 ON( d1.pk1 = d3.pk2 AND d1.pk2 = d3.pk1 )
  112. | LEFT JOIN dim_table AS d3 ON( d1.pk1 = d3.pk1 AND d1.pk1 = d3.pk2 )
  113. # Join against d2:
  114. | LEFT JOIN dim_table AS d3 ON( d2.pk1 = d3.pk1 )
  115. | LEFT JOIN dim_table AS d3 ON( d2.pk1 = d3.pk1 AND d2.pk2 = d3.pk2 )
  116. | LEFT JOIN dim_table AS d3 ON( d2.pk1 = d3.pk2 AND d2.pk2 = d3.pk1 )
  117. | LEFT JOIN dim_table AS d3 ON( d2.pk1 = d3.pk1 AND d2.pk1 = d3.pk2 )
  118. ;
  119. left_join4:
  120. # Join against ft:
  121. LEFT JOIN dim_table AS d4 ON( ft.fk1 = d4.pk1 )
  122. | LEFT JOIN dim_table AS d4 ON( ft.fk1 = d4.pk1 AND ft.fk2 = d4.pk2 )
  123. | LEFT JOIN dim_table AS d4 ON( ft.fk1 = d4.pk2 AND ft.fk2 = d4.pk1 )
  124. | LEFT JOIN dim_table AS d4 ON( ft.fk1 = d4.pk1 AND ft.fk1 = d4.pk2 )
  125. # Join against d1:
  126. | LEFT JOIN dim_table AS d4 ON( d1.pk1 = d4.pk1 )
  127. | LEFT JOIN dim_table AS d4 ON( d1.pk1 = d4.pk1 AND d1.pk2 = d4.pk2 )
  128. | LEFT JOIN dim_table AS d4 ON( d1.pk1 = d4.pk2 AND d1.pk2 = d4.pk1 )
  129. | LEFT JOIN dim_table AS d4 ON( d1.pk1 = d4.pk1 AND d1.pk1 = d4.pk2 )
  130. # Join against d2:
  131. | LEFT JOIN dim_table AS d4 ON( d2.pk1 = d4.pk1 )
  132. | LEFT JOIN dim_table AS d4 ON( d2.pk1 = d4.pk1 AND d2.pk2 = d4.pk2 )
  133. | LEFT JOIN dim_table AS d4 ON( d2.pk1 = d4.pk2 AND d2.pk2 = d4.pk1 )
  134. | LEFT JOIN dim_table AS d4 ON( d2.pk1 = d4.pk1 AND d2.pk1 = d4.pk2 )
  135. # Join against d3:
  136. | LEFT JOIN dim_table AS d4 ON( d3.pk1 = d4.pk1 )
  137. | LEFT JOIN dim_table AS d4 ON( d3.pk1 = d4.pk1 AND d3.pk2 = d4.pk2 )
  138. | LEFT JOIN dim_table AS d4 ON( d3.pk1 = d4.pk2 AND d3.pk2 = d4.pk1 )
  139. | LEFT JOIN dim_table AS d4 ON( d3.pk1 = d4.pk1 AND d3.pk1 = d4.pk2 )
  140. ;
  141. left_join5:
  142. # Join against ft:
  143. LEFT JOIN dim_table AS d5 ON( ft.fk1 = d5.pk1 )
  144. | LEFT JOIN dim_table AS d5 ON( ft.fk1 = d5.pk1 AND ft.fk2 = d5.pk2 )
  145. | LEFT JOIN dim_table AS d5 ON( ft.fk1 = d5.pk2 AND ft.fk2 = d5.pk1 )
  146. | LEFT JOIN dim_table AS d5 ON( ft.fk1 = d5.pk1 AND ft.fk1 = d5.pk2 )
  147. # Join against d1:
  148. | LEFT JOIN dim_table AS d5 ON( d1.pk1 = d5.pk1 )
  149. | LEFT JOIN dim_table AS d5 ON( d1.pk1 = d5.pk1 AND d1.pk2 = d5.pk2 )
  150. | LEFT JOIN dim_table AS d5 ON( d1.pk1 = d5.pk2 AND d1.pk2 = d5.pk1 )
  151. | LEFT JOIN dim_table AS d5 ON( d1.pk1 = d5.pk1 AND d1.pk1 = d5.pk2 )
  152. # Join against d2:
  153. | LEFT JOIN dim_table AS d5 ON( d2.pk1 = d5.pk1 )
  154. | LEFT JOIN dim_table AS d5 ON( d2.pk1 = d5.pk1 AND d2.pk2 = d5.pk2 )
  155. | LEFT JOIN dim_table AS d5 ON( d2.pk1 = d5.pk2 AND d2.pk2 = d5.pk1 )
  156. | LEFT JOIN dim_table AS d5 ON( d2.pk1 = d5.pk1 AND d2.pk1 = d5.pk2 )
  157. # Join against d3:
  158. | LEFT JOIN dim_table AS d5 ON( d3.pk1 = d5.pk1 )
  159. | LEFT JOIN dim_table AS d5 ON( d3.pk1 = d5.pk1 AND d3.pk2 = d5.pk2 )
  160. | LEFT JOIN dim_table AS d5 ON( d3.pk1 = d5.pk2 AND d3.pk2 = d5.pk1 )
  161. | LEFT JOIN dim_table AS d5 ON( d3.pk1 = d5.pk1 AND d3.pk1 = d5.pk2 )
  162. # Join against d4:
  163. | LEFT JOIN dim_table AS d5 ON( d4.pk1 = d5.pk1 )
  164. | LEFT JOIN dim_table AS d5 ON( d4.pk1 = d5.pk1 AND d4.pk2 = d5.pk2 )
  165. | LEFT JOIN dim_table AS d5 ON( d4.pk1 = d5.pk2 AND d4.pk2 = d5.pk1 )
  166. | LEFT JOIN dim_table AS d5 ON( d4.pk1 = d5.pk1 AND d4.pk1 = d5.pk2 )
  167. ;
  168. left_join6:
  169. # Join against ft:
  170. LEFT JOIN dim_table AS d6 ON( ft.fk1 = d6.pk1 )
  171. | LEFT JOIN dim_table AS d6 ON( ft.fk1 = d6.pk1 AND ft.fk2 = d6.pk2 )
  172. | LEFT JOIN dim_table AS d6 ON( ft.fk1 = d6.pk2 AND ft.fk2 = d6.pk1 )
  173. | LEFT JOIN dim_table AS d6 ON( ft.fk1 = d6.pk1 AND ft.fk1 = d6.pk2 )
  174. # Join against d1:
  175. | LEFT JOIN dim_table AS d6 ON( d1.pk1 = d6.pk1 )
  176. | LEFT JOIN dim_table AS d6 ON( d1.pk1 = d6.pk1 AND d1.pk2 = d6.pk2 )
  177. | LEFT JOIN dim_table AS d6 ON( d1.pk1 = d6.pk2 AND d1.pk2 = d6.pk1 )
  178. | LEFT JOIN dim_table AS d6 ON( d1.pk1 = d6.pk1 AND d1.pk1 = d6.pk2 )
  179. # Join against d2:
  180. | LEFT JOIN dim_table AS d6 ON( d2.pk1 = d6.pk1 )
  181. | LEFT JOIN dim_table AS d6 ON( d2.pk1 = d6.pk1 AND d2.pk2 = d6.pk2 )
  182. | LEFT JOIN dim_table AS d6 ON( d2.pk1 = d6.pk2 AND d2.pk2 = d6.pk1 )
  183. | LEFT JOIN dim_table AS d6 ON( d2.pk1 = d6.pk1 AND d2.pk1 = d6.pk2 )
  184. # Join against d3:
  185. | LEFT JOIN dim_table AS d6 ON( d3.pk1 = d6.pk1 )
  186. | LEFT JOIN dim_table AS d6 ON( d3.pk1 = d6.pk1 AND d3.pk2 = d6.pk2 )
  187. | LEFT JOIN dim_table AS d6 ON( d3.pk1 = d6.pk2 AND d3.pk2 = d6.pk1 )
  188. | LEFT JOIN dim_table AS d6 ON( d3.pk1 = d6.pk1 AND d3.pk1 = d6.pk2 )
  189. # Join against d4:
  190. | LEFT JOIN dim_table AS d6 ON( d4.pk1 = d6.pk1 )
  191. | LEFT JOIN dim_table AS d6 ON( d4.pk1 = d6.pk1 AND d4.pk2 = d6.pk2 )
  192. | LEFT JOIN dim_table AS d6 ON( d4.pk1 = d6.pk2 AND d4.pk2 = d6.pk1 )
  193. | LEFT JOIN dim_table AS d6 ON( d4.pk1 = d6.pk1 AND d4.pk1 = d6.pk2 )
  194. # Join against d5:
  195. | LEFT JOIN dim_table AS d6 ON( d5.pk1 = d6.pk1 )
  196. | LEFT JOIN dim_table AS d6 ON( d5.pk1 = d6.pk1 AND d5.pk2 = d6.pk2 )
  197. | LEFT JOIN dim_table AS d6 ON( d5.pk1 = d6.pk2 AND d5.pk2 = d6.pk1 )
  198. | LEFT JOIN dim_table AS d6 ON( d5.pk1 = d6.pk1 AND d5.pk1 = d6.pk2 )
  199. ;