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

Комбинирайте две таблици, изключете едни и същи записи

Изглежда, че имате нужда от FULL OUTER JOIN и изключва обща част. Можете да го симулирате с:

SELECT T1.col_nameFROM T1 LEFT JOIN T2 ON T1.col_name =T2.col_nameWHERE T2.col_name IS NULLUNIONSELECT T2.col_nameFROM T2 LEFT JOIN T1 ON T1.col_name =T2.col_name WHERE T1.col_name IS NULL; 

SqlFiddleDemo

<предварителен код>╔══════════╗║ име на колона ║╠══════════╣║ C ║║ D ║║ E ║║ F ║║ G ║ ═════════╝

Повече информация:Визуално представяне на SQL съединения

SELECT FROM Table_A AFULL OUTER JOIN Table_B BON A.Key =B.KeyWHERE A.Key IS NULL OR B.Key IS NULL 

За съжаление MySQL не поддържа FULL OUTER JOIN така че използвах обединение на 2 LEFT JOIN .

Допълнение

Можете лесно да го разширите с допълнителни колони.

SELECT 'T1' AS tab_name, T1.col_name, T1.col1, NULL AS col2FROM T1LEFT JOIN T2 ON T1.col_name=T2.col_name WHERE T2.col_name IS NULLUNIONSELECT 'T2' AS tab_name, T2.col_name, NULL, T2.col2FROM T2LEFT JOIN T1 ON T1.col_name=T2.col_name WHERE T1.col_name IS NULL; 

Демо на живо

Изход:

<предварителен код>╔══════════╦══════════╦══════╦════════════ ═══════╗║ tab_name ║ col_name ║ col1 ║ col2 ║╠══════════╬══════════╬══════╬═══ ══════════════════╣║ T1 ║ C ║ 3 ║ ║║ T1 ║ D ║ 4 ║ ║║ T2 ║ E ║ 03 ║0:0 20 00 ║║ T2 ║ F ║ ║ 2016-01-02 00:00:00 ║║ T2 ║ G ║ ║ 2016-01-01 00:00:00 ║╚════════╩␕␕ ════════╩══════╩═════════════════════╝

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP MYSQL:начин за изброяване на таблицата във възходящ ред

  2. Данни за подреждане на SQL от ред n+1 до n-1

  3. Как да актуализирате само една колона от sql таблица чрез csv файл

  4. mysql_query() очаква параметър 2 да бъде ресурс, даден низ

  5. Как да направите подвижна сума, всеки ред трябва да включва сумата на предишните редове