sql >> Database teknologi >  >> RDS >> Mysql

Kombination af resultater af udvalgte forespørgsler uden brug af sætoperatorer (UNION)

Lad os antage, at du har to tabeller, du vil UNION

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

Og eksempeldata

tabel1:

| ID | NAVN ||----|-------|| 1 | navn1 || 2 | navn2 || 3 | navn3 |

tabel 2:

| ID | NAVN ||----|--------|| 11 | navn11 || 22 | navn22 || 33 | navn33 || 1 | navn1 |

At emulere 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

Output:

| ID | NAVN ||----|--------|| 1 | navn1 || 2 | navn2 || 3 | navn3 || 11 | navn11 || 22 | navn22 || 33 | navn33 || 1 | navn1 |

At emulere UNION du skal blot tilføje 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

Output:

| ID | NAVN ||----|--------|| 1 | navn1 || 2 | navn2 || 3 | navn3 || 11 | navn11 || 22 | navn22 || 33 | name33 |

Her er SQLFiddle demo



  1. Ideel felttype til binære data med fast bredde

  2. Sådan fungerer UUID_SHORT() i MariaDB

  3. Sådan fungerer ORD() i MariaDB

  4. Laravel bruger where-sætning på en withCount-metode