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

Kết hợp kết quả của các truy vấn được chọn mà không sử dụng toán tử tập hợp (UNION)

Giả sử bạn có hai bảng mà bạn muốn UNION

CREATE TABLE Table1
(`id` int, `name` varchar(32));
CREATE TABLE Table2
(`id` int, `name` varchar(32));

Và dữ liệu mẫu

bảng 1:

| ID |  NAME |
|----|-------|
|  1 | name1 |
|  2 | name2 |
|  3 | name3 |

bảng 2:

| ID |  NAME  |
|----|--------|
| 11 | name11 |
| 22 | name22 |
| 33 | name33 |
|  1 |  name1 |

Để mô phỏng UNION ALL

SELECT COALESCE(t1.id, t2.id) id,
       COALESCE(t1.name, t2.name) name
  FROM 
(
  SELECT TABLE_NAME <> 'table1' n
    FROM INFORMATION_SCHEMA.TABLES
   WHERE TABLE_SCHEMA = SCHEMA()
     AND TABLE_NAME IN('table1', 'table2')
) t LEFT JOIN table1 t1 
    ON t.n = 0 LEFT JOIN table2 t2
    ON t.n = 1 

Đầu ra:

| ID |   NAME |
|----|--------|
|  1 |  name1 |
|  2 |  name2 |
|  3 |  name3 |
| 11 | name11 |
| 22 | name22 |
| 33 | name33 |
|  1 |  name1 |

Để mô phỏng UNION bạn chỉ cần thêm DISTINCT

SELECT DISTINCT COALESCE(t1.id, t2.id) id,
       COALESCE(t1.name, t2.name) name
  FROM 
(
  SELECT TABLE_NAME <> 'table1' n
    FROM INFORMATION_SCHEMA.TABLES
   WHERE TABLE_SCHEMA = SCHEMA()
     AND TABLE_NAME IN('table1', 'table2')
) t LEFT JOIN table1 t1 
    ON t.n = 0 LEFT JOIN table2 t2
    ON t.n = 1 

Đầu ra:

| ID |   NAME |
|----|--------|
|  1 |  name1 |
|  2 |  name2 |
|  3 |  name3 |
| 11 | name11 |
| 22 | name22 |
| 33 | name33 |

Đây là SQLFiddle bản demo



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để chuyển đổi dữ liệu dọc thành dữ liệu ngang với SQL?

  2. Truy vấn mysql và xuất dữ liệu dưới dạng CSV trong PHP

  3. xóa dữ liệu trùng lặp mysql

  4. Lệnh CakePHP không hoạt động

  5. Nhóm MySQL theo ngày và chuyển đổi từ dấu thời gian unix