Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Usuwanie duplikatów z wyniku wielokrotnego łączenia tabel z różnymi kolumnami w MySQL

Nie wiem, czy rozumiem Twój problem, ale dlaczego używasz LEFT JOIN? Historia brzmi bardziej jak WEWNĘTRZNE ŁĄCZENIE. Nic tutaj nie wzywa do UNII.

[Edytuj] OK, myślę, że teraz rozumiem, czego chcesz. Nigdy nie próbowałem tego, co zamierzam zasugerować, a co więcej, niektóre bazy danych nie obsługują tego (jeszcze), ale myślę, że potrzebujesz funkcji okienkowania.

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;

Chodzi o to, aby wydrukować listę w jak najmniejszej liczbie wierszy, prawda? Więc jeśli A1 ma 10 wpisów w Y i 7 w Z, to otrzymujemy 10 wierszy, z których 3 mają wartości NULL dla pól Z. Działa to w Postgresie. Nie wierzę, że ta składnia jest dostępna w MySQL.

T:

 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

Wynik powyższego oświadczenia:

 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. Wydajność/wydajność 2 instrukcji SELECT vs UNION vs cokolwiek innego w MySQL-PHP

  2. Nie mogę używać funkcji mysql_* po aktualizacji PHP

  3. W jaki sposób umożliwiasz klientom logowanie się do Twojej witryny przy użyciu ich konta Google?

  4. Mysql Kopiuj bazę danych z serwera na serwer jednym poleceniem

  5. Wstaw tam, gdzie nie istnieje — bez klucza podstawowego