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

Премахване на дубликати от резултат от множество обединения в таблици с различни колони в MySQL

Не знам дали разбирам проблема ви, но защо използвате LEFT JOIN? Историята звучи по-скоро като ININER JOIN. Нищо тук не призовава за СЪЮЗ.

[Редактиране] Добре, мисля, че виждам какво искате сега. Никога не съм пробвал това, което ще предложа, и нещо повече, някои БД не го поддържат (все още), но мисля, че искате функция за прозорец.

WITH Y2 AS (SELECT Y.*, ROW_NUMBER() OVER (PARTITION BY A) AS YROW FROM Y),
     Z2 AS (SELECT Z.*, ROW_NUMBER() OVER (PARTITION BY A) AS ZROW FROM Z)
SELECT COALESCE(Y2.A,Z2.A) AS A, Y2.C, Y2.D, Z2.E, Z2.F, Z2.G
FROM Y2 FULL OUTER JOIN Z2 ON Y2.A=Z2.A AND YROW=ZROW;

Идеята е да отпечатате списъка на възможно най-малко редове, нали? Така че, ако A1 има 10 записа в Y и 7 в Z, тогава получаваме 10 реда с 3 с NULL за Z полетата. Това работи в Postgres. Не вярвам, че този синтаксис е наличен в MySQL.

Y:

 a | d | c  
---+---+----
 1 | 1 | -1
 1 | 2 | -1
 2 | 0 | -1

Z:

 a | f | g | e 
---+---+---+---
 1 | 9 | 9 | 0
 2 | 1 | 1 | 0
 3 | 0 | 1 | 0

Изход на изявлението по-горе:

 a | c  | d | e | f | g 
---+----+---+---+---+---
 1 | -1 | 1 | 0 | 9 | 9
 1 | -1 | 2 |   |   |  
 2 | -1 | 0 | 0 | 1 | 1
 3 |    |   | 0 | 0 | 1


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. DATE() Примери – MySQL

  2. c3p0 виси в очакване. Налично с хибернация

  3. Система за вход/регистрация с php и mysql

  4. Как да изберете колона с помощта на Hibernate?

  5. Как да получите данни от миналата седмица в MySQL