sql >> Database teknologi >  >> RDS >> Mysql

Sådan viser du rækker, der ikke er til stede i en anden tabel i MySQL

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!

  1. SQL Server Delete Statement:Sådan fjerner du en eller multiplicerer rækker fra tabellen

  2. Kan jeg skrive PostgreSQL-funktioner på Ruby on Rails?

  3. ORACLE - ORA-01843:ikke en gyldig måned

  4. Hvordan kopierer jeg SQL Azure-databasen til min lokale udviklingsserver?