@@ -987,6 +987,34 @@ SELECT t1.c1, t2.c1 FROM ft4 t1 LEFT JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.
987987 40 |
988988(10 rows)
989989
990+ -- left outer join three tables
991+ EXPLAIN (COSTS false, VERBOSE)
992+ SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;
993+ QUERY PLAN
994+ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
995+ Limit
996+ Output: t1.c1, t2.c2, t3.c3
997+ -> Foreign Scan
998+ Output: t1.c1, t2.c2, t3.c3
999+ Relations: ((public.ft2 t1) LEFT JOIN (public.ft2 t2)) LEFT JOIN (public.ft4 t3)
1000+ Remote SQL: SELECT r1."C 1", r2.c2, r4.c3 FROM (("S 1"."T 1" r1 LEFT JOIN "S 1"."T 1" r2 ON (((r1."C 1" = r2."C 1")))) LEFT JOIN "S 1"."T 3" r4 ON (((r2."C 1" = r4.c1))))
1001+ (6 rows)
1002+
1003+ SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;
1004+ c1 | c2 | c3
1005+ ----+----+--------
1006+ 11 | 1 |
1007+ 12 | 2 | AAA012
1008+ 13 | 3 |
1009+ 14 | 4 | AAA014
1010+ 15 | 5 |
1011+ 16 | 6 | AAA016
1012+ 17 | 7 |
1013+ 18 | 8 | AAA018
1014+ 19 | 9 |
1015+ 20 | 0 | AAA020
1016+ (10 rows)
1017+
9901018-- left outer join + placement of clauses.
9911019-- clauses within the nullable side are not pulled up, but top level clause on
9921020-- non-nullable side is pushed into non-nullable side
@@ -1060,6 +1088,34 @@ SELECT t1.c1, t2.c1 FROM ft5 t1 RIGHT JOIN ft4 t2 ON (t1.c1 = t2.c1) ORDER BY t2
10601088 | 40
10611089(10 rows)
10621090
1091+ -- right outer join three tables
1092+ EXPLAIN (COSTS false, VERBOSE)
1093+ SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;
1094+ QUERY PLAN
1095+ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1096+ Limit
1097+ Output: t1.c1, t2.c2, t3.c3
1098+ -> Foreign Scan
1099+ Output: t1.c1, t2.c2, t3.c3
1100+ Relations: ((public.ft4 t3) LEFT JOIN (public.ft2 t2)) LEFT JOIN (public.ft2 t1)
1101+ Remote SQL: SELECT r4.c3, r2.c2, r1."C 1" FROM (("S 1"."T 3" r4 LEFT JOIN "S 1"."T 1" r2 ON (((r2."C 1" = r4.c1)))) LEFT JOIN "S 1"."T 1" r1 ON (((r1."C 1" = r2."C 1"))))
1102+ (6 rows)
1103+
1104+ SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;
1105+ c1 | c2 | c3
1106+ ----+----+--------
1107+ 22 | 2 | AAA022
1108+ 24 | 4 | AAA024
1109+ 26 | 6 | AAA026
1110+ 28 | 8 | AAA028
1111+ 30 | 0 | AAA030
1112+ 32 | 2 | AAA032
1113+ 34 | 4 | AAA034
1114+ 36 | 6 | AAA036
1115+ 38 | 8 | AAA038
1116+ 40 | 0 | AAA040
1117+ (10 rows)
1118+
10631119-- full outer join
10641120EXPLAIN (COSTS false, VERBOSE)
10651121SELECT t1.c1, t2.c1 FROM ft4 t1 FULL JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 45 LIMIT 10;
@@ -1088,6 +1144,202 @@ SELECT t1.c1, t2.c1 FROM ft4 t1 FULL JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.
10881144 | 27
10891145(10 rows)
10901146
1147+ -- full outer join three tables
1148+ EXPLAIN (COSTS false, VERBOSE)
1149+ SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;
1150+ QUERY PLAN
1151+ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1152+ Limit
1153+ Output: t1.c1, t2.c2, t3.c3
1154+ -> Foreign Scan
1155+ Output: t1.c1, t2.c2, t3.c3
1156+ Relations: ((public.ft2 t1) FULL JOIN (public.ft2 t2)) FULL JOIN (public.ft4 t3)
1157+ Remote SQL: SELECT r1."C 1", r2.c2, r4.c3 FROM (("S 1"."T 1" r1 FULL JOIN "S 1"."T 1" r2 ON (((r1."C 1" = r2."C 1")))) FULL JOIN "S 1"."T 3" r4 ON (((r2."C 1" = r4.c1))))
1158+ (6 rows)
1159+
1160+ SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;
1161+ c1 | c2 | c3
1162+ ----+----+--------
1163+ 11 | 1 |
1164+ 12 | 2 | AAA012
1165+ 13 | 3 |
1166+ 14 | 4 | AAA014
1167+ 15 | 5 |
1168+ 16 | 6 | AAA016
1169+ 17 | 7 |
1170+ 18 | 8 | AAA018
1171+ 19 | 9 |
1172+ 20 | 0 | AAA020
1173+ (10 rows)
1174+
1175+ -- full outer join + right outer join
1176+ EXPLAIN (COSTS false, VERBOSE)
1177+ SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;
1178+ QUERY PLAN
1179+ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1180+ Limit
1181+ Output: t1.c1, t2.c2, t3.c3
1182+ -> Foreign Scan
1183+ Output: t1.c1, t2.c2, t3.c3
1184+ Relations: ((public.ft4 t3) LEFT JOIN (public.ft2 t2)) LEFT JOIN (public.ft2 t1)
1185+ Remote SQL: SELECT r4.c3, r2.c2, r1."C 1" FROM (("S 1"."T 3" r4 LEFT JOIN "S 1"."T 1" r2 ON (((r2."C 1" = r4.c1)))) LEFT JOIN "S 1"."T 1" r1 ON (((r1."C 1" = r2."C 1"))))
1186+ (6 rows)
1187+
1188+ SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;
1189+ c1 | c2 | c3
1190+ ----+----+--------
1191+ 22 | 2 | AAA022
1192+ 24 | 4 | AAA024
1193+ 26 | 6 | AAA026
1194+ 28 | 8 | AAA028
1195+ 30 | 0 | AAA030
1196+ 32 | 2 | AAA032
1197+ 34 | 4 | AAA034
1198+ 36 | 6 | AAA036
1199+ 38 | 8 | AAA038
1200+ 40 | 0 | AAA040
1201+ (10 rows)
1202+
1203+ -- right outer join + full outer join
1204+ EXPLAIN (COSTS false, VERBOSE)
1205+ SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;
1206+ QUERY PLAN
1207+ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1208+ Limit
1209+ Output: t1.c1, t2.c2, t3.c3
1210+ -> Foreign Scan
1211+ Output: t1.c1, t2.c2, t3.c3
1212+ Relations: ((public.ft2 t2) LEFT JOIN (public.ft2 t1)) FULL JOIN (public.ft4 t3)
1213+ Remote SQL: SELECT r2.c2, r1."C 1", r4.c3 FROM (("S 1"."T 1" r2 LEFT JOIN "S 1"."T 1" r1 ON (((r1."C 1" = r2."C 1")))) FULL JOIN "S 1"."T 3" r4 ON (((r2."C 1" = r4.c1))))
1214+ (6 rows)
1215+
1216+ SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;
1217+ c1 | c2 | c3
1218+ ----+----+--------
1219+ 11 | 1 |
1220+ 12 | 2 | AAA012
1221+ 13 | 3 |
1222+ 14 | 4 | AAA014
1223+ 15 | 5 |
1224+ 16 | 6 | AAA016
1225+ 17 | 7 |
1226+ 18 | 8 | AAA018
1227+ 19 | 9 |
1228+ 20 | 0 | AAA020
1229+ (10 rows)
1230+
1231+ -- full outer join + left outer join
1232+ EXPLAIN (COSTS false, VERBOSE)
1233+ SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;
1234+ QUERY PLAN
1235+ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1236+ Limit
1237+ Output: t1.c1, t2.c2, t3.c3
1238+ -> Foreign Scan
1239+ Output: t1.c1, t2.c2, t3.c3
1240+ Relations: ((public.ft2 t1) FULL JOIN (public.ft2 t2)) LEFT JOIN (public.ft4 t3)
1241+ Remote SQL: SELECT r1."C 1", r2.c2, r4.c3 FROM (("S 1"."T 1" r1 FULL JOIN "S 1"."T 1" r2 ON (((r1."C 1" = r2."C 1")))) LEFT JOIN "S 1"."T 3" r4 ON (((r2."C 1" = r4.c1))))
1242+ (6 rows)
1243+
1244+ SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;
1245+ c1 | c2 | c3
1246+ ----+----+--------
1247+ 11 | 1 |
1248+ 12 | 2 | AAA012
1249+ 13 | 3 |
1250+ 14 | 4 | AAA014
1251+ 15 | 5 |
1252+ 16 | 6 | AAA016
1253+ 17 | 7 |
1254+ 18 | 8 | AAA018
1255+ 19 | 9 |
1256+ 20 | 0 | AAA020
1257+ (10 rows)
1258+
1259+ -- left outer join + full outer join
1260+ EXPLAIN (COSTS false, VERBOSE)
1261+ SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;
1262+ QUERY PLAN
1263+ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1264+ Limit
1265+ Output: t1.c1, t2.c2, t3.c3
1266+ -> Foreign Scan
1267+ Output: t1.c1, t2.c2, t3.c3
1268+ Relations: ((public.ft2 t1) LEFT JOIN (public.ft2 t2)) FULL JOIN (public.ft4 t3)
1269+ Remote SQL: SELECT r1."C 1", r2.c2, r4.c3 FROM (("S 1"."T 1" r1 LEFT JOIN "S 1"."T 1" r2 ON (((r1."C 1" = r2."C 1")))) FULL JOIN "S 1"."T 3" r4 ON (((r2."C 1" = r4.c1))))
1270+ (6 rows)
1271+
1272+ SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;
1273+ c1 | c2 | c3
1274+ ----+----+--------
1275+ 11 | 1 |
1276+ 12 | 2 | AAA012
1277+ 13 | 3 |
1278+ 14 | 4 | AAA014
1279+ 15 | 5 |
1280+ 16 | 6 | AAA016
1281+ 17 | 7 |
1282+ 18 | 8 | AAA018
1283+ 19 | 9 |
1284+ 20 | 0 | AAA020
1285+ (10 rows)
1286+
1287+ -- right outer join + left outer join
1288+ EXPLAIN (COSTS false, VERBOSE)
1289+ SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;
1290+ QUERY PLAN
1291+ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1292+ Limit
1293+ Output: t1.c1, t2.c2, t3.c3
1294+ -> Foreign Scan
1295+ Output: t1.c1, t2.c2, t3.c3
1296+ Relations: ((public.ft2 t2) LEFT JOIN (public.ft2 t1)) LEFT JOIN (public.ft4 t3)
1297+ Remote SQL: SELECT r2.c2, r1."C 1", r4.c3 FROM (("S 1"."T 1" r2 LEFT JOIN "S 1"."T 1" r1 ON (((r1."C 1" = r2."C 1")))) LEFT JOIN "S 1"."T 3" r4 ON (((r2."C 1" = r4.c1))))
1298+ (6 rows)
1299+
1300+ SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;
1301+ c1 | c2 | c3
1302+ ----+----+--------
1303+ 11 | 1 |
1304+ 12 | 2 | AAA012
1305+ 13 | 3 |
1306+ 14 | 4 | AAA014
1307+ 15 | 5 |
1308+ 16 | 6 | AAA016
1309+ 17 | 7 |
1310+ 18 | 8 | AAA018
1311+ 19 | 9 |
1312+ 20 | 0 | AAA020
1313+ (10 rows)
1314+
1315+ -- left outer join + right outer join
1316+ EXPLAIN (COSTS false, VERBOSE)
1317+ SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;
1318+ QUERY PLAN
1319+ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1320+ Limit
1321+ Output: t1.c1, t2.c2, t3.c3
1322+ -> Foreign Scan
1323+ Output: t1.c1, t2.c2, t3.c3
1324+ Relations: (public.ft4 t3) LEFT JOIN ((public.ft2 t1) INNER JOIN (public.ft2 t2))
1325+ Remote SQL: SELECT r4.c3, r1."C 1", r2.c2 FROM ("S 1"."T 3" r4 LEFT JOIN ("S 1"."T 1" r1 INNER JOIN "S 1"."T 1" r2 ON (TRUE)) ON (((r2."C 1" = r4.c1)) AND ((r1."C 1" = r2."C 1"))))
1326+ (6 rows)
1327+
1328+ SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;
1329+ c1 | c2 | c3
1330+ ----+----+--------
1331+ 22 | 2 | AAA022
1332+ 24 | 4 | AAA024
1333+ 26 | 6 | AAA026
1334+ 28 | 8 | AAA028
1335+ 30 | 0 | AAA030
1336+ 32 | 2 | AAA032
1337+ 34 | 4 | AAA034
1338+ 36 | 6 | AAA036
1339+ 38 | 8 | AAA038
1340+ 40 | 0 | AAA040
1341+ (10 rows)
1342+
10911343-- full outer join + WHERE clause, only matched rows
10921344EXPLAIN (COSTS false, VERBOSE)
10931345SELECT t1.c1, t2.c1 FROM ft4 t1 FULL JOIN ft5 t2 ON (t1.c1 = t2.c1) WHERE (t1.c1 = t2.c1 OR t1.c1 IS NULL) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;
0 commit comments