Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-16357

LIMIT and ORDER BY clause is ignored on a query with UNION when using brackets

Details

    • Bug
    • Status: Closed (View Workflow)
    • Major
    • Resolution: Fixed
    • 10.4(EOL)
    • 10.4.0
    • Parser
    • None

    Description

      CREATE TABLE t1 (b int);
      INSERT INTO t1 VALUES(1),(2),(3),(4);
       
      CREATE TABLE t2 (b int);
      INSERT INTO t2 VALUES (4),(5),(6),(7);
       
      (select b from t1  UNION select b from t2) limit 1;
      (select b from t1  UNION select b from t2) order by b desc;
      

      MariaDB [test]> (select b from t1  UNION select b from t2) limit 1;
      +------+
      | b    |
      +------+
      |    1 |
      |    2 |
      |    3 |
      |    4 |
      |    5 |
      |    6 |
      |    7 |
      +------+
      7 rows in set (0.001 sec)
       
      MariaDB [test]> (select b from t1  UNION select b from t2) order by b desc;
      +------+
      | b    |
      +------+
      |    1 |
      |    2 |
      |    3 |
      |    4 |
      |    5 |
      |    6 |
      |    7 |
      +------+
      7 rows in set (0.001 sec)
       
      MariaDB [test]> (select b from t1  UNION select b from t2 limit 1);
      +------+
      | b    |
      +------+
      |    1 |
      |    2 |
      |    3 |
      |    4 |
      |    5 |
      |    6 |
      |    7 |
      +------+
      7 rows in set (0.002 sec)
      expected :
      MariaDB [test]> select b from t1  UNION select b from t2 limit 1;
      +------+
      | b    |
      +------+
      |    1 |
      +------+
      1 row in set (0.001 sec)
      

      Attachments

        Issue Links

          Activity

            alice Alice Sherepa added a comment -

            10.4 4272eec050400a1913362cbcd215133ff3eccdd5

            MariaDB [test]> ((select b from t1  UNION select b from t2 ) order by b desc);
            +------+
            | b    |
            +------+
            |    1 |
            |    2 |
            |    3 |
            |    4 |
            |    5 |
            |    6 |
            |    7 |
            +------+
            7 rows in set (0.004 sec)
             
            MariaDB [test]> explain extended ((select b from t1  UNION select b from t2 ) order by b desc);
            +------+--------------+------------+------+---------------+------+---------+------+------+----------+-------+
            | id   | select_type  | table      | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra |
            +------+--------------+------------+------+---------------+------+---------+------+------+----------+-------+
            |    1 | PRIMARY      | t1         | ALL  | NULL          | NULL | NULL    | NULL |    4 |   100.00 |       |
            |    2 | UNION        | t2         | ALL  | NULL          | NULL | NULL    | NULL |    4 |   100.00 |       |
            | NULL | UNION RESULT | <union1,2> | ALL  | NULL          | NULL | NULL    | NULL | NULL |     NULL |       |
            +------+--------------+------------+------+---------------+------+---------+------+------+----------+-------+
            3 rows in set, 1 warning (0.003 sec)
             
            Note (Code 1003): (/* select#1 */ select `test`.`t1`.`b` AS `b` from `test`.`t1`) union /* select#2 */ select `test`.`t2`.`b` AS `b` from `test`.`t2`
            

            But this works:

            MariaDB [test]> (((select b from t1  UNION select b from t2 ) order by b desc) order by b desc);
            +------+
            | b    |
            +------+
            |    7 |
            |    6 |
            |    5 |
            |    4 |
            |    3 |
            |    2 |
            |    1 |
            +------+
            7 rows in set (0.006 sec)
             
            MariaDB [test]> explain extended ( ((select b from t1  UNION select b from t2 ) order by b desc) order by b desc);
            +------+--------------+------------+------+---------------+------+---------+------+------+----------+----------------+
            | id   | select_type  | table      | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra          |
            +------+--------------+------------+------+---------------+------+---------+------+------+----------+----------------+
            |    1 | PRIMARY      | <derived2> | ALL  | NULL          | NULL | NULL    | NULL |    8 |   100.00 | Using filesort |
            |    2 | DERIVED      | t1         | ALL  | NULL          | NULL | NULL    | NULL |    4 |   100.00 |                |
            |    3 | UNION        | t2         | ALL  | NULL          | NULL | NULL    | NULL |    4 |   100.00 |                |
            | NULL | UNION RESULT | <union2,3> | ALL  | NULL          | NULL | NULL    | NULL | NULL |     NULL | Using filesort |
            +------+--------------+------------+------+---------------+------+---------+------+------+----------+----------------+
            4 rows in set, 1 warning (0.004 sec)
             
            Note (Code 1003): /* select#1 */ select `__3`.`b` AS `b` from ((/* select#2 */ select `test`.`t1`.`b` AS `b` from `test`.`t1`) union /* select#3 */ select `test`.`t2`.`b` AS `b` from `test`.`t2` order by `b` desc) `__3` order by `__3`.`b` desc
            
            

            alice Alice Sherepa added a comment - 10.4 4272eec050400a1913362cbcd215133ff3eccdd5 MariaDB [test]> (( select b from t1 UNION select b from t2 ) order by b desc ); + ------+ | b | + ------+ | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | + ------+ 7 rows in set (0.004 sec)   MariaDB [test]> explain extended (( select b from t1 UNION select b from t2 ) order by b desc ); + ------+--------------+------------+------+---------------+------+---------+------+------+----------+-------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | filtered | Extra | + ------+--------------+------------+------+---------------+------+---------+------+------+----------+-------+ | 1 | PRIMARY | t1 | ALL | NULL | NULL | NULL | NULL | 4 | 100.00 | | | 2 | UNION | t2 | ALL | NULL | NULL | NULL | NULL | 4 | 100.00 | | | NULL | UNION RESULT | <union1,2> | ALL | NULL | NULL | NULL | NULL | NULL | NULL | | + ------+--------------+------------+------+---------------+------+---------+------+------+----------+-------+ 3 rows in set , 1 warning (0.003 sec)   Note (Code 1003): ( /* select#1 */ select `test`.`t1`.`b` AS `b` from `test`.`t1`) union /* select#2 */ select `test`.`t2`.`b` AS `b` from `test`.`t2` But this works: MariaDB [test]> ((( select b from t1 UNION select b from t2 ) order by b desc ) order by b desc ); + ------+ | b | + ------+ | 7 | | 6 | | 5 | | 4 | | 3 | | 2 | | 1 | + ------+ 7 rows in set (0.006 sec)   MariaDB [test]> explain extended ( (( select b from t1 UNION select b from t2 ) order by b desc ) order by b desc ); + ------+--------------+------------+------+---------------+------+---------+------+------+----------+----------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | filtered | Extra | + ------+--------------+------------+------+---------------+------+---------+------+------+----------+----------------+ | 1 | PRIMARY | <derived2> | ALL | NULL | NULL | NULL | NULL | 8 | 100.00 | Using filesort | | 2 | DERIVED | t1 | ALL | NULL | NULL | NULL | NULL | 4 | 100.00 | | | 3 | UNION | t2 | ALL | NULL | NULL | NULL | NULL | 4 | 100.00 | | | NULL | UNION RESULT | <union2,3> | ALL | NULL | NULL | NULL | NULL | NULL | NULL | Using filesort | + ------+--------------+------------+------+---------------+------+---------+------+------+----------+----------------+ 4 rows in set , 1 warning (0.004 sec)   Note (Code 1003): /* select#1 */ select `__3`.`b` AS `b` from (( /* select#2 */ select `test`.`t1`.`b` AS `b` from `test`.`t1`) union /* select#3 */ select `test`.`t2`.`b` AS `b` from `test`.`t2` order by `b` desc ) `__3` order by `__3`.`b` desc

            OK to push

            sanja Oleksandr Byelkin added a comment - OK to push

            A fix for this bug was pushed into 10.4

            igor Igor Babaev (Inactive) added a comment - A fix for this bug was pushed into 10.4

            People

              igor Igor Babaev (Inactive)
              alice Alice Sherepa
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Git Integration

                  Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.