1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-10-31 18:30:33 +03:00

fix tests

This commit is contained in:
Aleksei Antipovskii
2025-08-27 23:17:23 +02:00
committed by Leonid Fedorov
parent 3a316181e7
commit 3d26e4d6fd
2 changed files with 70 additions and 79 deletions

View File

@@ -1,10 +1,6 @@
# #
# MDEV-25080: Allow pushdown of queries involving UNIONs # MDEV-25080: Allow pushdown of queries involving UNIONs
# in outer select to foreign engines # in outer select to foreign engines
#
# Remove the sorted_result MTR qualifier and add ORDER BY
# clause after MCOL-5222 is fixed
#
CREATE USER IF NOT EXISTS'cejuser'@'localhost' IDENTIFIED BY 'Vagrant1|0000001'; CREATE USER IF NOT EXISTS'cejuser'@'localhost' IDENTIFIED BY 'Vagrant1|0000001';
GRANT ALL PRIVILEGES ON *.* TO 'cejuser'@'localhost'; GRANT ALL PRIVILEGES ON *.* TO 'cejuser'@'localhost';
FLUSH PRIVILEGES; FLUSH PRIVILEGES;
@@ -20,17 +16,17 @@ INSERT INTO t2 VALUES ('bcd'), ('cde'), ('def'), ('efg');
INSERT INTO t3 VALUES ('t3_myisam1'), ('t3_myisam2'), ('t3_myisam3'); INSERT INTO t3 VALUES ('t3_myisam1'), ('t3_myisam2'), ('t3_myisam3');
INSERT INTO t4 VALUES ('t4_myisam1'), ('t4_myisam2'), ('t4_myisam3'); INSERT INTO t4 VALUES ('t4_myisam1'), ('t4_myisam2'), ('t4_myisam3');
# Pushdown of the whole UNION # Pushdown of the whole UNION
SELECT * FROM t1 UNION SELECT * FROM t2; SELECT * FROM t1 UNION SELECT * FROM t2 ORDER BY 1;
a a
abc abc
bcd bcd
cde cde
def def
efg efg
EXPLAIN SELECT * FROM t1 UNION SELECT * FROM t2; EXPLAIN SELECT * FROM t1 UNION SELECT * FROM t2 ORDER BY 1;
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
NULL PUSHED UNION NULL NULL NULL NULL NULL NULL NULL NULL NULL PUSHED UNION NULL NULL NULL NULL NULL NULL NULL NULL
SELECT * FROM t1 UNION ALL SELECT * FROM t2; SELECT * FROM t1 UNION ALL SELECT * FROM t2 ORDER BY 1;
a a
abc abc
bcd bcd
@@ -39,11 +35,11 @@ cde
cde cde
def def
efg efg
EXPLAIN SELECT * FROM t1 UNION ALL SELECT * FROM t2; EXPLAIN SELECT * FROM t1 UNION ALL SELECT * FROM t2 ORDER BY 1;
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
NULL PUSHED UNION NULL NULL NULL NULL NULL NULL NULL NULL NULL PUSHED UNION NULL NULL NULL NULL NULL NULL NULL NULL
# UNION with a foreign engine # UNION with a foreign engine
SELECT * FROM t1 UNION SELECT * FROM t3; SELECT * FROM t1 UNION SELECT * FROM t3 ORDER BY 1;
a a
abc abc
bcd bcd
@@ -51,13 +47,14 @@ cde
t3_myisam1 t3_myisam1
t3_myisam2 t3_myisam2
t3_myisam3 t3_myisam3
EXPLAIN SELECT * FROM t1 UNION SELECT * FROM t3; EXPLAIN SELECT * FROM t1 UNION SELECT * FROM t3 ORDER BY 1;
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
NULL PUSHED UNION NULL NULL NULL NULL NULL NULL NULL NULL NULL PUSHED UNION NULL NULL NULL NULL NULL NULL NULL NULL
# More than two SELECTs in a UNIT: # More than two SELECTs in a UNIT:
SELECT * FROM t1 UNION SELECT * FROM t1 UNION
SELECT * FROM t2 UNION ALL SELECT * FROM t2 UNION ALL
SELECT * FROM t1; SELECT * FROM t1
ORDER BY 1;
a a
abc abc
abc abc
@@ -69,12 +66,14 @@ def
efg efg
EXPLAIN SELECT * FROM t1 UNION EXPLAIN SELECT * FROM t1 UNION
SELECT * FROM t2 UNION ALL SELECT * FROM t2 UNION ALL
SELECT * FROM t1; SELECT * FROM t1
ORDER BY 1;
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
NULL PUSHED UNION NULL NULL NULL NULL NULL NULL NULL NULL NULL PUSHED UNION NULL NULL NULL NULL NULL NULL NULL NULL
(SELECT * FROM t1 UNION (SELECT * FROM t1 UNION
SELECT * FROM t2) UNION ALL SELECT * FROM t2) UNION ALL
SELECT * FROM t1; SELECT * FROM t1
ORDER BY 1;
a a
abc abc
abc abc
@@ -86,13 +85,15 @@ def
efg efg
EXPLAIN (SELECT * FROM t1 UNION EXPLAIN (SELECT * FROM t1 UNION
SELECT * FROM t2) UNION ALL SELECT * FROM t2) UNION ALL
SELECT * FROM t1; SELECT * FROM t1
ORDER BY 1;
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
NULL PUSHED UNION NULL NULL NULL NULL NULL NULL NULL NULL NULL PUSHED UNION NULL NULL NULL NULL NULL NULL NULL NULL
SELECT * FROM t1 UNION SELECT * FROM t1 UNION
SELECT * FROM t2 UNION ALL SELECT * FROM t2 UNION ALL
SELECT * FROM t3 UNION SELECT * FROM t3 UNION
SELECT * FROM t4; SELECT * FROM t4
ORDER BY 1;
a a
abc abc
bcd bcd
@@ -108,13 +109,15 @@ t4_myisam3
EXPLAIN SELECT * FROM t1 UNION EXPLAIN SELECT * FROM t1 UNION
SELECT * FROM t2 UNION ALL SELECT * FROM t2 UNION ALL
SELECT * FROM t3 UNION SELECT * FROM t3 UNION
SELECT * FROM t4; SELECT * FROM t4
ORDER BY 1;
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
NULL PUSHED UNION NULL NULL NULL NULL NULL NULL NULL NULL NULL PUSHED UNION NULL NULL NULL NULL NULL NULL NULL NULL
(SELECT * FROM t1 UNION (SELECT * FROM t1 UNION
SELECT * FROM t2) UNION ALL SELECT * FROM t2) UNION ALL
(SELECT * FROM t3 UNION (SELECT * FROM t3 UNION
SELECT * FROM t4); SELECT * FROM t4)
ORDER BY 1;
a a
abc abc
bcd bcd
@@ -130,23 +133,26 @@ t4_myisam3
EXPLAIN (SELECT * FROM t1 UNION EXPLAIN (SELECT * FROM t1 UNION
SELECT * FROM t2) UNION ALL SELECT * FROM t2) UNION ALL
(SELECT * FROM t3 UNION (SELECT * FROM t3 UNION
SELECT * FROM t4); SELECT * FROM t4)
ORDER BY 1;
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
NULL PUSHED UNION NULL NULL NULL NULL NULL NULL NULL NULL NULL PUSHED UNION NULL NULL NULL NULL NULL NULL NULL NULL
SELECT count(*) FROM t1 UNION SELECT count(*) FROM t1 UNION
SELECT count(*) FROM t2 UNION ALL SELECT count(*) FROM t2 UNION ALL
SELECT count(*)+20 FROM t2 UNION SELECT count(*)+20 FROM t2 UNION
SELECT count(*)+5 FROM t1; SELECT count(*)+5 FROM t1
ORDER BY 1;
count(*) count(*)
24
3 3
4 4
8 8
24
EXPLAIN EXPLAIN
SELECT count(*) FROM t1 UNION SELECT count(*) FROM t1 UNION
SELECT count(*) FROM t2 UNION ALL SELECT count(*) FROM t2 UNION ALL
SELECT count(*)+20 FROM t2 UNION SELECT count(*)+20 FROM t2 UNION
SELECT count(*)+5 FROM t1; SELECT count(*)+5 FROM t1
ORDER BY 1;
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
NULL PUSHED UNION NULL NULL NULL NULL NULL NULL NULL NULL NULL PUSHED UNION NULL NULL NULL NULL NULL NULL NULL NULL
# UNION inside a derived table: the whole derived table must be pushed # UNION inside a derived table: the whole derived table must be pushed
@@ -181,7 +187,7 @@ id select_type table type possible_keys key key_len ref rows Extra
1 PUSHED SELECT NULL NULL NULL NULL NULL NULL NULL NULL 1 PUSHED SELECT NULL NULL NULL NULL NULL NULL NULL NULL
# Prepared statements # Prepared statements
PREPARE stmt FROM "SELECT * FROM t1 UNION PREPARE stmt FROM "SELECT * FROM t1 UNION
SELECT * FROM t2"; SELECT * FROM t2 ORDER BY 1";
EXECUTE stmt; EXECUTE stmt;
a a
abc abc
@@ -204,7 +210,7 @@ cde
def def
efg efg
PREPARE stmt FROM "EXPLAIN SELECT * FROM t1 UNION PREPARE stmt FROM "EXPLAIN SELECT * FROM t1 UNION
SELECT * FROM t2"; SELECT * FROM t2 ORDER BY 1";
EXECUTE stmt; EXECUTE stmt;
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
NULL PUSHED UNION NULL NULL NULL NULL NULL NULL NULL NULL NULL PUSHED UNION NULL NULL NULL NULL NULL NULL NULL NULL
@@ -214,7 +220,7 @@ NULL PUSHED UNION NULL NULL NULL NULL NULL NULL NULL NULL
PREPARE stmt FROM "(SELECT * FROM t1 UNION PREPARE stmt FROM "(SELECT * FROM t1 UNION
SELECT * FROM t2) UNION ALL SELECT * FROM t2) UNION ALL
(SELECT * FROM t1 UNION (SELECT * FROM t1 UNION
SELECT * FROM t2)"; SELECT * FROM t2) ORDER BY 1";
EXECUTE stmt; EXECUTE stmt;
a a
abc abc
@@ -254,7 +260,7 @@ efg
PREPARE stmt FROM "EXPLAIN (SELECT * FROM t1 UNION PREPARE stmt FROM "EXPLAIN (SELECT * FROM t1 UNION
SELECT * FROM t2) UNION ALL SELECT * FROM t2) UNION ALL
(SELECT * FROM t1 UNION (SELECT * FROM t1 UNION
SELECT * FROM t2)"; SELECT * FROM t2) ORDER BY 1";
EXECUTE stmt; EXECUTE stmt;
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
NULL PUSHED UNION NULL NULL NULL NULL NULL NULL NULL NULL NULL PUSHED UNION NULL NULL NULL NULL NULL NULL NULL NULL
@@ -274,18 +280,15 @@ def
efg efg
EXPLAIN SELECT * FROM t1 UNION ALL SELECT * FROM t2 ORDER BY a; EXPLAIN SELECT * FROM t1 UNION ALL SELECT * FROM t2 ORDER BY a;
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 2000 NULL PUSHED UNION NULL NULL NULL NULL NULL NULL NULL NULL
2 UNION t2 ALL NULL NULL NULL NULL 2000 SELECT * FROM t1 UNION ALL SELECT * FROM t2 ORDER BY a LIMIT 3;
NULL UNION RESULT <union1,2> ALL NULL NULL NULL NULL NULL Using filesort
SELECT * FROM t1 UNION ALL SELECT * FROM t2 LIMIT 3;
a a
abc abc
bcd bcd
cde bcd
EXPLAIN SELECT * FROM t1 UNION ALL SELECT * FROM t2 LIMIT 3; EXPLAIN SELECT * FROM t1 UNION ALL SELECT * FROM t2 ORDER BY a LIMIT 3;
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 2000 NULL PUSHED UNION NULL NULL NULL NULL NULL NULL NULL NULL
2 UNION t2 ALL NULL NULL NULL NULL 2000
SELECT * FROM t1 UNION ALL SELECT * FROM t2 ORDER BY a DESC LIMIT 5; SELECT * FROM t1 UNION ALL SELECT * FROM t2 ORDER BY a DESC LIMIT 5;
a a
efg efg
@@ -295,9 +298,7 @@ cde
bcd bcd
EXPLAIN SELECT * FROM t1 UNION ALL SELECT * FROM t2 ORDER BY a DESC LIMIT 5; EXPLAIN SELECT * FROM t1 UNION ALL SELECT * FROM t2 ORDER BY a DESC LIMIT 5;
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 2000 NULL PUSHED UNION NULL NULL NULL NULL NULL NULL NULL NULL
2 UNION t2 ALL NULL NULL NULL NULL 2000
NULL UNION RESULT <union1,2> ALL NULL NULL NULL NULL NULL Using filesort
SELECT * FROM t1 UNION ALL SELECT * FROM t2 ORDER BY a LIMIT 3 OFFSET 2; SELECT * FROM t1 UNION ALL SELECT * FROM t2 ORDER BY a LIMIT 3 OFFSET 2;
a a
bcd bcd
@@ -305,9 +306,7 @@ cde
cde cde
EXPLAIN SELECT * FROM t1 UNION ALL SELECT * FROM t2 ORDER BY a LIMIT 3 OFFSET 2; EXPLAIN SELECT * FROM t1 UNION ALL SELECT * FROM t2 ORDER BY a LIMIT 3 OFFSET 2;
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 2000 NULL PUSHED UNION NULL NULL NULL NULL NULL NULL NULL NULL
2 UNION t2 ALL NULL NULL NULL NULL 2000
NULL UNION RESULT <union1,2> ALL NULL NULL NULL NULL NULL Using filesort
DROP USER 'cejuser'@'localhost'; DROP USER 'cejuser'@'localhost';
DROP TABLE t1, t2, t3, t4; DROP TABLE t1, t2, t3, t4;
DROP DATABASE mdev25080; DROP DATABASE mdev25080;

View File

@@ -1,10 +1,6 @@
--echo # --echo #
--echo # MDEV-25080: Allow pushdown of queries involving UNIONs --echo # MDEV-25080: Allow pushdown of queries involving UNIONs
--echo # in outer select to foreign engines --echo # in outer select to foreign engines
--echo #
--echo # Remove the sorted_result MTR qualifier and add ORDER BY
--echo # clause after MCOL-5222 is fixed
--echo #
--source ../include/have_columnstore.inc --source ../include/have_columnstore.inc
@@ -51,71 +47,73 @@ INSERT INTO t3 VALUES ('t3_myisam1'), ('t3_myisam2'), ('t3_myisam3');
INSERT INTO t4 VALUES ('t4_myisam1'), ('t4_myisam2'), ('t4_myisam3'); INSERT INTO t4 VALUES ('t4_myisam1'), ('t4_myisam2'), ('t4_myisam3');
--echo # Pushdown of the whole UNION --echo # Pushdown of the whole UNION
--sorted_result SELECT * FROM t1 UNION SELECT * FROM t2 ORDER BY 1;
SELECT * FROM t1 UNION SELECT * FROM t2; EXPLAIN SELECT * FROM t1 UNION SELECT * FROM t2 ORDER BY 1;
EXPLAIN SELECT * FROM t1 UNION SELECT * FROM t2;
--sorted_result SELECT * FROM t1 UNION ALL SELECT * FROM t2 ORDER BY 1;
SELECT * FROM t1 UNION ALL SELECT * FROM t2; EXPLAIN SELECT * FROM t1 UNION ALL SELECT * FROM t2 ORDER BY 1;
EXPLAIN SELECT * FROM t1 UNION ALL SELECT * FROM t2;
--echo # UNION with a foreign engine --echo # UNION with a foreign engine
--sorted_result SELECT * FROM t1 UNION SELECT * FROM t3 ORDER BY 1;
SELECT * FROM t1 UNION SELECT * FROM t3; EXPLAIN SELECT * FROM t1 UNION SELECT * FROM t3 ORDER BY 1;
EXPLAIN SELECT * FROM t1 UNION SELECT * FROM t3;
--echo # More than two SELECTs in a UNIT: --echo # More than two SELECTs in a UNIT:
--sorted_result
SELECT * FROM t1 UNION SELECT * FROM t1 UNION
SELECT * FROM t2 UNION ALL SELECT * FROM t2 UNION ALL
SELECT * FROM t1; SELECT * FROM t1
ORDER BY 1;
EXPLAIN SELECT * FROM t1 UNION EXPLAIN SELECT * FROM t1 UNION
SELECT * FROM t2 UNION ALL SELECT * FROM t2 UNION ALL
SELECT * FROM t1; SELECT * FROM t1
ORDER BY 1;
--sorted_result
(SELECT * FROM t1 UNION (SELECT * FROM t1 UNION
SELECT * FROM t2) UNION ALL SELECT * FROM t2) UNION ALL
SELECT * FROM t1; SELECT * FROM t1
ORDER BY 1;
EXPLAIN (SELECT * FROM t1 UNION EXPLAIN (SELECT * FROM t1 UNION
SELECT * FROM t2) UNION ALL SELECT * FROM t2) UNION ALL
SELECT * FROM t1; SELECT * FROM t1
ORDER BY 1;
--sorted_result
SELECT * FROM t1 UNION SELECT * FROM t1 UNION
SELECT * FROM t2 UNION ALL SELECT * FROM t2 UNION ALL
SELECT * FROM t3 UNION SELECT * FROM t3 UNION
SELECT * FROM t4; SELECT * FROM t4
ORDER BY 1;
EXPLAIN SELECT * FROM t1 UNION EXPLAIN SELECT * FROM t1 UNION
SELECT * FROM t2 UNION ALL SELECT * FROM t2 UNION ALL
SELECT * FROM t3 UNION SELECT * FROM t3 UNION
SELECT * FROM t4; SELECT * FROM t4
ORDER BY 1;
--sorted_result
(SELECT * FROM t1 UNION (SELECT * FROM t1 UNION
SELECT * FROM t2) UNION ALL SELECT * FROM t2) UNION ALL
(SELECT * FROM t3 UNION (SELECT * FROM t3 UNION
SELECT * FROM t4); SELECT * FROM t4)
ORDER BY 1;
EXPLAIN (SELECT * FROM t1 UNION EXPLAIN (SELECT * FROM t1 UNION
SELECT * FROM t2) UNION ALL SELECT * FROM t2) UNION ALL
(SELECT * FROM t3 UNION (SELECT * FROM t3 UNION
SELECT * FROM t4); SELECT * FROM t4)
ORDER BY 1;
--sorted_result
SELECT count(*) FROM t1 UNION SELECT count(*) FROM t1 UNION
SELECT count(*) FROM t2 UNION ALL SELECT count(*) FROM t2 UNION ALL
SELECT count(*)+20 FROM t2 UNION SELECT count(*)+20 FROM t2 UNION
SELECT count(*)+5 FROM t1; SELECT count(*)+5 FROM t1
ORDER BY 1;
EXPLAIN EXPLAIN
SELECT count(*) FROM t1 UNION SELECT count(*) FROM t1 UNION
SELECT count(*) FROM t2 UNION ALL SELECT count(*) FROM t2 UNION ALL
SELECT count(*)+20 FROM t2 UNION SELECT count(*)+20 FROM t2 UNION
SELECT count(*)+5 FROM t1; SELECT count(*)+5 FROM t1
ORDER BY 1;
--echo # UNION inside a derived table: the whole derived table must be pushed --echo # UNION inside a derived table: the whole derived table must be pushed
SELECT a FROM SELECT a FROM
@@ -134,17 +132,14 @@ EXPLAIN
--echo # Prepared statements --echo # Prepared statements
PREPARE stmt FROM "SELECT * FROM t1 UNION PREPARE stmt FROM "SELECT * FROM t1 UNION
SELECT * FROM t2"; SELECT * FROM t2 ORDER BY 1";
--sorted_result
EXECUTE stmt; EXECUTE stmt;
--sorted_result
EXECUTE stmt; EXECUTE stmt;
--sorted_result
EXECUTE stmt; EXECUTE stmt;
PREPARE stmt FROM "EXPLAIN SELECT * FROM t1 UNION PREPARE stmt FROM "EXPLAIN SELECT * FROM t1 UNION
SELECT * FROM t2"; SELECT * FROM t2 ORDER BY 1";
EXECUTE stmt; EXECUTE stmt;
EXECUTE stmt; EXECUTE stmt;
@@ -152,19 +147,16 @@ EXECUTE stmt;
PREPARE stmt FROM "(SELECT * FROM t1 UNION PREPARE stmt FROM "(SELECT * FROM t1 UNION
SELECT * FROM t2) UNION ALL SELECT * FROM t2) UNION ALL
(SELECT * FROM t1 UNION (SELECT * FROM t1 UNION
SELECT * FROM t2)"; SELECT * FROM t2) ORDER BY 1";
--sorted_result
EXECUTE stmt; EXECUTE stmt;
--sorted_result
EXECUTE stmt; EXECUTE stmt;
--sorted_result
EXECUTE stmt; EXECUTE stmt;
PREPARE stmt FROM "EXPLAIN (SELECT * FROM t1 UNION PREPARE stmt FROM "EXPLAIN (SELECT * FROM t1 UNION
SELECT * FROM t2) UNION ALL SELECT * FROM t2) UNION ALL
(SELECT * FROM t1 UNION (SELECT * FROM t1 UNION
SELECT * FROM t2)"; SELECT * FROM t2) ORDER BY 1";
EXECUTE stmt; EXECUTE stmt;
EXECUTE stmt; EXECUTE stmt;
@@ -173,8 +165,8 @@ EXECUTE stmt;
--echo # clause is involved, until MCOL-5222 is fixed. --echo # clause is involved, until MCOL-5222 is fixed.
SELECT * FROM t1 UNION ALL SELECT * FROM t2 ORDER BY a; SELECT * FROM t1 UNION ALL SELECT * FROM t2 ORDER BY a;
EXPLAIN SELECT * FROM t1 UNION ALL SELECT * FROM t2 ORDER BY a; EXPLAIN SELECT * FROM t1 UNION ALL SELECT * FROM t2 ORDER BY a;
SELECT * FROM t1 UNION ALL SELECT * FROM t2 LIMIT 3; SELECT * FROM t1 UNION ALL SELECT * FROM t2 ORDER BY a LIMIT 3;
EXPLAIN SELECT * FROM t1 UNION ALL SELECT * FROM t2 LIMIT 3; EXPLAIN SELECT * FROM t1 UNION ALL SELECT * FROM t2 ORDER BY a LIMIT 3;
SELECT * FROM t1 UNION ALL SELECT * FROM t2 ORDER BY a DESC LIMIT 5; SELECT * FROM t1 UNION ALL SELECT * FROM t2 ORDER BY a DESC LIMIT 5;
EXPLAIN SELECT * FROM t1 UNION ALL SELECT * FROM t2 ORDER BY a DESC LIMIT 5; EXPLAIN SELECT * FROM t1 UNION ALL SELECT * FROM t2 ORDER BY a DESC LIMIT 5;
SELECT * FROM t1 UNION ALL SELECT * FROM t2 ORDER BY a LIMIT 3 OFFSET 2; SELECT * FROM t1 UNION ALL SELECT * FROM t2 ORDER BY a LIMIT 3 OFFSET 2;