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

Come mostrare le righe non presenti in un'altra tabella in MySQL

A volte potrebbe essere necessario trovare righe non presenti in un'altra tabella o selezionare righe non presenti in un'altra tabella. In questo articolo vedremo come mostrare le righe non presenti in un'altra tabella in MySQL, usando la clausola NOT EXISTS.


Clausola MySQL NOT EXISTS

MySQL fornisce clausole EXISTS, UNION e NOT EXISTS che consentono di eseguire operazioni SET con le tabelle MySQL. Per operazioni SET, intendiamo che puoi trattare le tabelle MySQL e i risultati delle query come insiemi matematici e selezionare le righe che sono presenti in entrambe le tabelle o solo in una delle tabelle. Per il nostro articolo utilizzeremo la clausola NOT EXISTS.


Come mostrare le righe non presenti in un'altra tabella

Ecco i passaggi per trovare le righe non presenti in un'altra tabella. Supponiamo che tu abbia due tabelle vendite(id, data_ordine, importo) e ordini(id, data_ordine, importo)

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 |
 +------+------------+--------+

Ecco la query SQL per selezionare i dati dalle vendite tabella che non è presente negli ordini tabella.

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 |
 +------+------------+--------+

Nella query precedente, utilizziamo la clausola NOT EXISTS per selezionare la riga da vendite tabelle che non sono presenti negli ordini tabella, che vengono selezionati utilizzando la sottoquery. Nella sottoquery, selezioniamo solo quelle righe da ordini tabella il cui data_ordine è uguale a quello delle vendite tabella.

Hai bisogno di uno strumento di reporting per MySQL? Ubiq semplifica la visualizzazione dei dati in pochi minuti e il monitoraggio in dashboard in tempo reale. Provalo oggi!