Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So zeigen Sie Zeilen an, die in einer anderen Tabelle in MySQL nicht vorhanden sind

Manchmal müssen Sie möglicherweise Zeilen finden, die in einer anderen Tabelle nicht vorhanden sind, oder Zeilen auswählen, die in einer anderen Tabelle nicht vorhanden sind. In diesem Artikel werden wir uns ansehen, wie Zeilen angezeigt werden, die in einer anderen Tabelle in MySQL nicht vorhanden sind, indem die NOT EXISTS-Klausel verwendet wird.


MySQL NOT EXISTS-Klausel

MySQL bietet EXISTS-, UNION- und NOT EXISTS-Klauseln, mit denen Sie SET-Operationen mit MySQL-Tabellen ausführen können. Mit SET-Operationen meinen wir, dass Sie MySQL-Tabellen und Abfrageergebnisse als mathematische Sätze behandeln und Zeilen auswählen können, die in beiden Tabellen oder nur in einer der Tabellen vorhanden sind. Für unseren Artikel verwenden wir die NOT EXISTS-Klausel.


So zeigen Sie Zeilen an, die in keiner anderen Tabelle vorhanden sind

Hier sind die Schritte zum Suchen von Zeilen, die in keiner anderen Tabelle vorhanden sind. Nehmen wir an, Sie haben zwei Tabellen sales(id, order_date, amount) und Bestellungen (ID, Bestelldatum, Betrag)

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

Hier ist die SQL-Abfrage, um Daten aus Verkäufen auszuwählen Tabelle, die in Bestellungen nicht vorhanden ist Tabelle.

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

In der obigen Abfrage verwenden wir die NOT EXISTS-Klausel, um eine Zeile aus Verkäufen auszuwählen Tabelle, die nicht in Bestellungen vorhanden sind Tabelle, die mit subquery ausgewählt werden. In der Unterabfrage wählen wir nur diese Zeilen aus Bestellungen aus Tabelle, deren order_date ist dasselbe wie im Verkauf Tabelle.

Benötigen Sie ein Reporting-Tool für MySQL? Ubiq macht es einfach, Daten innerhalb von Minuten zu visualisieren und in Echtzeit-Dashboards zu überwachen. Probieren Sie es noch heute aus!