sql >> Databáze >  >> RDS >> Mysql

Odstranění duplikátů z výsledku vícenásobného spojení v tabulkách s různými sloupci v MySQL

Nevím, jestli rozumím vašemu problému, ale proč používáte LEFT JOIN? Příběh zní spíše jako INNER JOIN. Nic zde nevyžaduje UNIE.

[Edit]OK, myslím, že teď vidím, co chceš. Nikdy jsem nezkoušel to, co se chystám navrhnout, a co víc, některé DB to (zatím) nepodporují, ale myslím, že chcete funkci oken.

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;

Cílem je vytisknout seznam v co nejmenším počtu řádků, že? Takže pokud má A1 10 položek v Y a 7 v Z, pak dostaneme 10 řádků, z nichž 3 mají NULL pro pole Z. V Postgresu to funguje. Nevěřím, že tato syntaxe je v MySQL dostupná.

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

Výstup výše uvedeného prohlášení:

 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. jak vybrat sudé záznamy z tabulky v oracle?

  2. odstranit duplicitní hodnoty pole v postgresu

  3. Jak funguje TIME_FORMAT() v MariaDB

  4. Jak formátovat čísla v MySQL