# name: test/sql/join/natural/natural_join.test # description: Test natural joins # group: [natural] # create tables statement ok CREATE TABLE t1 (a INTEGER, b INTEGER) statement ok INSERT INTO t1 VALUES (1, 2) statement ok CREATE TABLE t2 (a INTEGER, c INTEGER) statement ok INSERT INTO t2 VALUES (1, 3), (2, 4) # NATURAL join with one column query III SELECT * FROM t1 NATURAL JOIN t2 ---- 1 2 3 query III SELECT t1.a, t1.b, t2.c FROM t1 NATURAL JOIN t2 ---- 1 2 3 query III SELECT t1.a, t1.b, t2.c FROM t1 NATURAL JOIN t2 ORDER BY t2.a ---- 1 2 3 # natural join with multiple matching columns statement ok CREATE TABLE t3 (a INTEGER, b INTEGER, c INTEGER) statement ok INSERT INTO t3 VALUES (1, 2, 3) query III SELECT * FROM t1 NATURAL JOIN t3 ---- 1 2 3 query III SELECT * FROM t3 NATURAL JOIN t2 ---- 1 2 3 # natural join chain query III SELECT * FROM t1 NATURAL JOIN t2 NATURAL JOIN t3 ---- 1 2 3 # no matching columns statement error select * from (values (1)) tbl(a) natural join (values (1), (2)) tbl2(b) order by 1, 2 ---- :.*Binder Error.*No columns found to join.* # long join chain query I select * from (values (1)) tbl(a) natural join (values (1)) tbl2(a) natural join (values (1)) tbl3(a) natural join (values (1)) tbl4(a) natural join (values (1)) tbl5(a) ---- 1 # natural join with subqueries query I select * from (select 42) tbl(a) natural join (select 42) tbl2(a) ---- 42 # uncorrelated scalar subquery query I select (select * from (select 42) tbl(a) natural join (select 42) tbl2(a)) ---- 42 # Multiple 8-bit bitmasks query IIIIIIIIIII select * from (select 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52) tbl1(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) natural join (select 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52) tbl2(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); ---- 42 43 44 45 46 47 48 49 50 51 52 # JoinHashTable::ScanFullOuter coverage statement ok CREATE TABLE sqlancer_t0(c0 DOUBLE, c1 DOUBLE); statement ok INSERT INTO sqlancer_t0 VALUES (0.000000, -1570504255.000000), (0.000000, -1570504255.000000), (0.000000, -1570504255.000000), (0.000000, -1570504255.000000), (0.000000, 1.000000), (0.000000, 0.543647), (0.000000, NULL), (0.000000, 1.000000), (0.000000, 1.000000), (0.000000, 0.000000), (0.000000, 1617540830.000000), (0.000000, NULL), (0.000000, NULL), (0.000000, NULL), (0.000000, 0.497659), (0.000000, -1367407567.000000), (0.000000, NULL), (0.000000, NULL), (0.000000, NULL), (0.000000, NULL), (0.000000, NULL), (0.000000, -547966124.000000), (0.000000, NULL), (0.000000, -1417028911.000000), (0.000000, 277394703.000000), (0.000000, NULL), (0.000000, NULL), (0.000000, NULL), (0.000000, NULL), (0.000000, NULL) ; statement ok CREATE VIEW sqlancer_v0(c0, c1) AS SELECT sqlancer_t0.c0, ((sqlancer_t0.rowid)//(-1694294358)) FROM sqlancer_t0 ORDER BY TIMESTAMP '1970-01-08 16:19:01' ASC; query II SELECT DISTINCT sqlancer_v0.c1, sqlancer_t0.rowid FROM sqlancer_v0 NATURAL FULL JOIN sqlancer_t0 ORDER BY 2 ASC; ---- NULL 0 NULL 1 NULL 2 NULL 3 NULL 4 NULL 5 NULL 6 NULL 7 NULL 8 0 9 NULL 10 NULL 11 NULL 12 NULL 13 NULL 14 NULL 15 NULL 16 NULL 17 NULL 18 NULL 19 NULL 20 NULL 21 NULL 22 NULL 23 NULL 24 NULL 25 NULL 26 NULL 27 NULL 28 NULL 29 query II SELECT DISTINCT sqlancer_v0.c1, sqlancer_t0.rowid FROM sqlancer_v0 NATURAL FULL JOIN sqlancer_t0 WHERE sqlancer_t0.c0 UNION SELECT DISTINCT sqlancer_v0.c1, sqlancer_t0.rowid FROM sqlancer_v0 NATURAL FULL JOIN sqlancer_t0 WHERE (NOT sqlancer_t0.c0) UNION SELECT DISTINCT sqlancer_v0.c1, sqlancer_t0.rowid FROM sqlancer_v0 NATURAL FULL JOIN sqlancer_t0 WHERE ((sqlancer_t0.c0) IS NULL) ORDER BY 2 ASC; ---- NULL 0 NULL 1 NULL 2 NULL 3 NULL 4 NULL 5 NULL 6 NULL 7 NULL 8 0 9 NULL 10 NULL 11 NULL 12 NULL 13 NULL 14 NULL 15 NULL 16 NULL 17 NULL 18 NULL 19 NULL 20 NULL 21 NULL 22 NULL 23 NULL 24 NULL 25 NULL 26 NULL 27 NULL 28 NULL 29 # error: duplicate table alias on both sides statement error select (select * from (select 42) tbl(a) natural join (select 42) tbl(a)) ---- :.*Binder Error.*Ambiguous reference to table.* statement ok DROP TABLE t1 statement ok CREATE TABLE t0(c0 DATE, c1 DATE DEFAULT('0.5868720116119102'), c2 INT1, PRIMARY KEY(c1, c2, c0)); statement ok CREATE TABLE t1(c0 DATETIME, c1 DATE DEFAULT(TIMESTAMP '1970-01-11 02:37:59'), PRIMARY KEY(c0)); statement ok CREATE VIEW v0(c0) AS SELECT false FROM t1, t0 HAVING 1689380428; statement ok SELECT COUNT(t1.rowid) FROM t1, v0 NATURAL RIGHT JOIN t0; statement ok SELECT COUNT(t1.rowid) FROM t1, v0 RIGHT JOIN t0 ON v0.c0=t0.c0; statement error SELECT COUNT(t1.rowid) FROM t1, v0 RIGHT JOIN t0 ON t1.c1=t0.c1 AND v0.c0=t0.c0; ---- :.*Not implemented Error.*Non-inner join on correlated columns.* # column name appears more than once on left side of the natural join statement error select * from (values (1)) t1(i) join (values (1)) t2(i) on (t1.i=t2.i) natural join (values (1)) t3(i); ---- :.*Binder Error.*Ambiguous reference to column name.* statement ok PRAGMA disable_verification # column name appears more than once on right side of the natural join statement error select * from (values (1)) t1(i) natural join ((values (1)) t2(i) join (values (1)) t3(i) on (t2.i=t3.i)) ---- :.*Binder Error.*exists more than once on right side of join.*