Mysql
 sql >> база данни >  >> RDS >> Mysql

Как резултатите се смесват между две таблици при използване на UNION

Ако искате да редувате редове от резултатите на съюз, ще трябва да дадете на всеки от тях ранг, който се увеличава с две - един за коефициенти, един за четни.

select @rank := @rank + 2 `rank`, *
  from table1, (select @rank := -1) q
    where column1 = 'anything'
union all
select @rank2 := @rank2 + 2 `rank`, *
  from table2, (select @rank2 := 0) q
    where column1 = 'anything'
order by rank asc;

sqlfiddle изглежда не работи, иначе бих създал демонстрация, но трябва да работи.

@rank и @rank2 са променливи. @rank2 := @rank2 + 2 увеличава @rank от 2 за всеки ред в набора от резултати и включва новата стойност в резултатите.from table2, (select @rank2 := 0) q е просто начин да принудите променливата да бъде инициализирана на 0 без да се налага да изпълнявате допълнителни заявки. Като стартирате брояча на ранга от -1 за първата заявка и -0 за втората заявка, всеки ред в първата заявка получава ранг в последователността 1,3,5,7,... и всеки ред във втората заявка получава ранг в последователността 2,4,6,8,...

пример

mysql> create table table1 (id integer primary key auto_increment, column1 varchar(25));
Query OK, 0 rows affected (0.08 sec)

mysql> create table table2 (id integer primary key auto_increment, column1 varchar(25));
Query OK, 0 rows affected (0.08 sec)

mysql> insert into table1 (column1) values ('abcd'), ('lmno'), ('abcd'), ('lmno'), ('pqr');
Query OK, 5 rows affected (0.03 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> insert into table2 (column1) values ('lmno'), ('abcd'), ('abcd'), ('lmno'), ('abcd'), ('abcd'), ('abcd');
Query OK, 7 rows affected (0.05 sec)
Records: 7  Duplicates: 0  Warnings: 0

и данните:

mysql> select * from table1;
+----+---------+
| id | column1 |
+----+---------+
|  1 | abcd    |
|  2 | lmno    |
|  3 | abcd    |
|  4 | lmno    |
|  5 | pqr     |
+----+---------+
5 rows in set (0.00 sec)

mysql> select * from table2;
+----+---------+
| id | column1 |
+----+---------+
|  1 | lmno    |
|  2 | abcd    |
|  3 | abcd    |
|  4 | lmno    |
|  5 | abcd    |
|  6 | abcd    |
|  7 | abcd    |
+----+---------+
7 rows in set (0.00 sec)

и резултатът:

mysql> select @rank := @rank + 2 `rank`, id from table1, (select @rank := -1) q where column1 = 'abcd' union select @rank2 := @rank2 + 2 `rank`, id from table2, (select @rank2 := 0) q where column1 = 'abcd' order by rank asc;
+------+----+
| rank | id |
+------+----+
|    1 |  1 |
|    2 |  2 |
|    3 |  3 |
|    4 |  3 |
|    6 |  5 |
|    8 |  6 |
|   10 |  7 |
+------+----+
7 rows in set (0.00 sec)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JPA:как да запазя низ в поле на база данни, напишете MYSQL Text

  2. java.sql.SQLSyntaxErrorException:Неизвестна колона .JPA Entity Проблем?

  3. MySQL преобразува градус, минути, секунди в десетичен градус

  4. Получаване на mysql резултат от последните 30 дни

  5. Как да деактивирате проверката на чужд ключ в MySQL