Nogle gange kan det være nødvendigt at finde rækker, der ikke findes i en anden tabel, eller vælge rækker, der ikke findes i en anden tabel. I denne artikel vil vi se på, hvordan man viser rækker, der ikke findes i en anden tabel i MySQL, ved hjælp af NOT EXISTS-sætning.
MySQL FINDER IKKE klausul
MySQL giver EXISTS, UNION og NOT EXISTS-sætninger, der hjælper dig med at udføre SET-operationer med MySQL-tabeller. Med SET-operationer mener vi, at du kan behandle MySQL-tabeller og forespørgselsresultater som matematiske sæt og vælge rækker, der er til stede i begge tabeller, eller kun én af tabellerne. Til vores artikel vil vi bruge NOT EXISTS-sætningen.
Sådan viser du rækker, der ikke findes i en anden tabel
Her er trinene til at finde rækker, der ikke findes i en anden tabel. Lad os sige, at du har to tabeller salg(id, ordre_dato, beløb) og ordrer(id, ordredato, beløb)
mysql> create table sales(id int, order_date date, amount int);
mysql> insert into sales(id, order_date, amount)
values(1, '2021-01-24',250),
(2, '2021-01-25',250),
(3, '2021-01-26',250),
(4, '2021-01-27',250),
(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);
mysql> select * from sales;
+------+------------+--------+
| id | order_date | amount |
+------+------------+--------+
| 1 | 2021-01-24 | 250 |
| 2 | 2021-01-25 | 250 |
| 3 | 2021-01-26 | 250 |
| 4 | 2021-01-27 | 250 |
| 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 |
+------+------------+--------+
mysql> create table orders(id int, order_date date, amount int);
mysql> insert into orders(id, order_date, amount)
values(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);
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 SQL-forespørgslen til at vælge data fra salg tabel, der ikke er til stede i ordrer tabel.
mysql> SELECT *
FROM sales D
WHERE NOT EXISTS(SELECT * FROM orders c
WHERE D.order_date = C.order_date);
+------+------------+--------+
| id | order_date | amount |
+------+------------+--------+
| 1 | 2021-01-24 | 250 |
| 2 | 2021-01-25 | 250 |
| 3 | 2021-01-26 | 250 |
| 4 | 2021-01-27 | 250 |
+------+------------+--------+ I ovenstående forespørgsel bruger vi NOT EXISTS-klausulen til at vælge række fra salg tabel, der ikke er til stede i ordrer tabel, som vælges ved hjælp af underforespørgsel. I underforespørgslen vælger vi kun disse rækker fra ordrer tabel, hvis ordre_date er den samme som i salg tabel.
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!