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

Комбиниране на резултати от заявки за избор без използване на оператори за набор (UNION)

Да предположим, че имате две таблици, които искате да UNION

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

И примерни данни

таблица 1:

<пред>| ID | ИМЕ ||----|-------|| 1 | име1 || 2 | име2 || 3 | име3 |

таблица 2:

<пред>| ID | ИМЕ ||----|--------|| 11 | име11 || 22 | име22 || 33 | име33 || 1 | име1 |

За да емулирате 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 
 

Изход:

<пред>| ID | ИМЕ ||----|--------|| 1 | име1 || 2 | име2 || 3 | име3 || 11 | име11 || 22 | име22 || 33 | име33 || 1 | име1 |

За да емулирате UNION трябва само да добавите 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 
 

Изход:

<пред>| ID | ИМЕ ||----|--------|| 1 | име1 || 2 | име2 || 3 | име3 || 11 | име11 || 22 | име22 || 33 | име33 |

Ето SQLPiddle демонстрация



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да разрешим грешка при извикване на недефинирана функция dbase_open() в Windows

  2. Надстройка на Laravel 5.4, преобразуване в utf4mb от utf8

  3. Един външен ключ с 2 таблица с препратки

  4. схема на база данни за атрибути на продукти

  5. MySQL код за грешка 1235