MySQL understøtter ikke fuld outer join out of the box, i modsætning til andre databaser såsom PostgreSQL og SQL Server. Så du bliver nødt til at lave en fuldstændig ydre joinforbindelse ved at bruge en kombination af andre jointyper såsom LEFT JOIN og RIGHT JOIN, der understøttes i MySQL. I denne artikel vil vi se på, hvordan man kan få fuld ydre joinforbindelse i MySQL.
Sådan laver du en fuld ydre deltagelse i MySQL
Her er trinene til at lave en fuld ydre joinforbindelse i MySQL.
Lad os sige, at du har følgende to tabeller salg og ordrer .
mysql> select * from sales; +------+---------------------+--------+ | id | order_date | amount | +------+---------------------+--------+ | 1 | 2021-02-02 08:15:00 | 250 | | 2 | 2021-02-02 08:30:00 | 200 | | 3 | 2021-02-02 08:55:00 | 150 | | 4 | 2021-02-02 09:15:00 | 125 | | 5 | 2021-02-02 09:30:00 | 250 | | 6 | 2021-02-02 09:45:00 | 200 | | 7 | 2021-02-02 10:15:00 | 180 | | 8 | 2021-02-02 10:30:00 | 125 | | 9 | 2021-02-02 10:45:00 | 200 | | 10 | 2021-02-02 11:15:00 | 250 | | 11 | 2021-02-02 11:30:00 | 150 | | 12 | 2021-02-02 11:45:00 | 200 | +------+---------------------+--------+ mysql> select * from orders; +------+------------+--------+ | id | order_date | amount | +------+------------+--------+ | 5 | 2021-01-28 | 250 | | 6 | 2021-01-29 | 250 | | 7 | 2021-01-30 | 250 | | 8 | 2021-01-31 | 250 | | 9 | 2021-02-01 | 250 | +------+------------+--------+
Her er den generelle syntaks til at lave en fuld ydre joinforbindelse i MySQL mellem tabeller t1 og t2 baseret på JOIN-feltet id . Du kan opdatere tabelnavnene og tilmeldingsfeltet efter dit krav.
SELECT * FROM t1LEFT JOIN t2 ON t1.id = t2.idUNION ALLSELECT * FROM t1RIGHT JOIN t2 ON t1.id = t2.idWHERE t1.id IS NULL
Ovenstående forespørgsel vil også returnere duplikerede rækker, hvis nogen. Hvis du ikke vil have dublerede poster i fuld ydre joinforbindelse, skal du bruge følgende forespørgsel i stedet.
SELECT * FROM t1LEFT JOIN t2 ON t1.id = t2.idUNIONSELECT * FROM t1RIGHT JOIN t2 ON t1.id = t2.id
Her er SQL-forespørgslen til at lave en fuld ydre joinforbindelse mellem tabeller salg og ordrer .
mysql> SELECT * FROM sales
LEFT JOIN orders ON sales.id = orders.id
UNION ALL
SELECT * FROM sales
RIGHT JOIN orders ON sales.id = orders.id
WHERE sales.id IS NULL ;
+------+---------------------+--------+------+------------+--------+
| id | order_date | amount | id | order_date | amount |
+------+---------------------+--------+------+------------+--------+
| 5 | 2021-02-02 09:30:00 | 250 | 5 | 2021-01-28 | 250 |
| 6 | 2021-02-02 09:45:00 | 200 | 6 | 2021-01-29 | 250 |
| 7 | 2021-02-02 10:15:00 | 180 | 7 | 2021-01-30 | 250 |
| 8 | 2021-02-02 10:30:00 | 125 | 8 | 2021-01-31 | 250 |
| 9 | 2021-02-02 10:45:00 | 200 | 9 | 2021-02-01 | 250 |
| 1 | 2021-02-02 08:15:00 | 250 | NULL | NULL | NULL |
| 2 | 2021-02-02 08:30:00 | 200 | NULL | NULL | NULL |
| 3 | 2021-02-02 08:55:00 | 150 | NULL | NULL | NULL |
| 4 | 2021-02-02 09:15:00 | 125 | NULL | NULL | NULL |
| 10 | 2021-02-02 11:15:00 | 250 | NULL | NULL | NULL |
| 11 | 2021-02-02 11:30:00 | 150 | NULL | NULL | NULL |
| 12 | 2021-02-02 11:45:00 | 200 | NULL | NULL | NULL |
+------+---------------------+--------+------+------------+--------+ Her er SQL-forespørgslen for at udføre fuld ydre joinforbindelse uden duplikerede rækker i resultatet.
mysql> SELECT * FROM sales
LEFT JOIN orders ON sales.id = orders.id
UNION
SELECT * FROM sales
RIGHT JOIN orders ON sales.id = orders.id;
Har du brug for et rapporteringsværktøj til MySQL? Ubiq gør det nemt at visualisere data på få minutter og overvåge i dashboards i realtid. Prøv det i dag!