Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách kết quả trộn lẫn giữa hai bảng khi sử dụng UNION

Nếu bạn muốn thay thế các hàng từ kết quả của một liên hợp, bạn sẽ cần cung cấp cho mỗi hàng một thứ hạng tăng lên hai - một đối với tỷ lệ cược, một đối với tỷ lệ cược.

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 có vẻ không ổn, nếu không, tôi sẽ tạo một bản demo, nhưng nó sẽ hoạt động.

@rank@rank2 là các biến. @rank2 := @rank2 + 2 gia số @rank bởi 2 cho mọi hàng trong tập kết quả và bao gồm giá trị mới trong kết quả. from table2, (select @rank2 := 0) q chỉ là một cách để buộc biến được khởi tạo thành 0 mà không cần phải chạy các truy vấn bổ sung. Bằng cách bắt đầu bộ đếm thứ hạng tại -1 cho truy vấn đầu tiên và -0 đối với truy vấn thứ hai, mỗi hàng trong truy vấn đầu tiên nhận được một thứ hạng trong chuỗi 1,3,5,7,... và mọi hàng trong truy vấn thứ hai nhận được xếp hạng trong chuỗi 2,4,6,8,...

ví dụ

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

và dữ liệu:

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)

và kết quả:

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. Bản đồ JPA loại json MySQL, có chuỗi bị cắt xén

  2. Quản lý tài khoản người dùng, vai trò, quyền, xác thực PHP và MySQL

  3. Chương trình Java và sự cố kết nối mySQL:Không tìm thấy trình điều khiển phù hợp

  4. Tại sao MySQL gặp lỗi Không được phép trả về tập kết quả từ một hàm?

  5. Mysql chọn các hàng chuyển đổi cho mỗi lần thực thi