Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak wyświetlić wiersze nieobecne w innej tabeli w MySQL?

Czasami może być konieczne znalezienie wierszy, których nie ma w innej tabeli lub zaznaczenie wierszy, których nie ma w innej tabeli. W tym artykule przyjrzymy się, jak wyświetlić wiersze, których nie ma w innej tabeli w MySQL, używając klauzuli NOT EXISTS.


Klauzula MySQL NOT EXISTS

MySQL udostępnia klauzule EXISTS, UNION i NOT EXISTS, które ułatwiają wykonywanie operacji SET na tabelach MySQL. Przez operacje SET rozumiemy, że można traktować tabele i wyniki zapytań MySQL jako zestawy matematyczne i wybierać wiersze, które występują w obu tabelach lub tylko w jednej z nich. W naszym artykule użyjemy klauzuli NOT EXISTS.


Jak pokazać wiersze nieobecne w innej tabeli

Oto kroki, aby znaleźć wiersze, których nie ma w innej tabeli. Załóżmy, że masz dwie tabele sprzedaż(id, data_zamówienia, kwota) i zamówienia(id, data_zamówienia, kwota)

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

Oto zapytanie SQL służące do wybrania danych ze sprzedaży tabela, której nie ma w zamówieniach tabela.

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

W powyższym zapytaniu używamy klauzuli NOT EXISTS, aby wybrać wiersz z sprzedaży tabela, której nie ma w zamówieniach tabeli, które są wybierane za pomocą podzapytania. W podzapytaniu wybieramy tylko te wiersze z zamówień tabela, której data_zamówienia jest taki sam jak w sprzedaży tabela.

Potrzebujesz narzędzia do raportowania dla MySQL? Ubiq ułatwia wizualizację danych w ciągu kilku minut i monitorowanie w pulpitach nawigacyjnych w czasie rzeczywistym. Wypróbuj już dziś!

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. HAProxy:wszystkie zasoby z serii Kilkanaście

  2. Jak przekonwertować wszystkie tabele z MyISAM do InnoDB?

  3. PHP/MySQL Wstaw wartości puste

  4. Jak sortować wiersze tabeli HTML, które są wywoływane z MySQL

  5. 3 sposoby na znalezienie wierszy zawierających małe litery w MySQL