sql >> Databasteknik >  >> RDS >> Mysql

Ta bort dubbletter från resultatet av flera kopplingar på tabeller med olika kolumner i MySQL

Jag vet inte om jag förstår ditt problem, men varför använder du en LEFT JOIN? Berättelsen låter mer som en INNER JOIN. Ingenting här kräver en UNION.

[Redigera] OK, jag tror att jag ser vad du vill nu. Jag har aldrig provat det jag ska föreslå, och dessutom har vissa DB:er inte stöd för det (ännu), men jag tror att du vill ha en fönsterfunktion.

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;

Tanken är väl att skriva ut listan i så få rader som möjligt? Så om A1 har 10 poster i Y och 7 i Z, så får vi 10 rader där 3 har NULL för Z-fälten. Detta fungerar i Postgres. Jag tror inte att den här syntaxen är tillgänglig i 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

Utdata från påståendet ovan:

 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. Prestandatestning med MySQLdump och MySQL Shell Utility

  2. mysql visar tillgängliga tidsluckor och tidsluckor upptagna från bordet

  3. Hur man optimerar MySQL-prestanda med MySQLTuner

  4. Hur infogar man bilder i blob i mysql-tabellen med enbart sql-syntax (utan PHP)?