sql >> Databáze >  >> RDS >> Mysql

Jak zobrazit řádky, které nejsou přítomny v jiné tabulce v MySQL

Někdy možná budete muset najít řádky, které se nenacházejí v jiné tabulce, nebo vybrat řádky, které se v jiné tabulce nenacházejí. V tomto článku se podíváme na to, jak zobrazit řádky, které se nenacházejí v jiné tabulce v MySQL, pomocí klauzule NOT EXISTS.


Klauzule MySQL NOT EXISTS

MySQL poskytuje klauzule EXISTS, UNION a NOT EXISTS, které vám pomohou provádět operace SET s tabulkami MySQL. Operacemi SET máme na mysli, že s tabulkami a výsledky dotazů MySQL můžete zacházet jako s matematickými sadami a vybrat řádky, které jsou přítomné v obou tabulkách nebo pouze v jedné z tabulek. Pro náš článek použijeme klauzuli NOT EXISTS.


Jak zobrazit řádky, které nejsou v jiné tabulce

Zde jsou kroky k nalezení řádků, které se nenacházejí v jiné tabulce. Řekněme, že máte dvě tabulky prodej(id, datum_objednávky, částka) a objednávky(id, datum_objednávky, částka)

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

Zde je dotaz SQL pro výběr dat z prodejů tabulka, která se nenachází v objednávkách tabulka.

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

Ve výše uvedeném dotazu používáme klauzuli NOT EXISTS k výběru řádku z prodeje tabulky, které nejsou uvedeny v objednávkách tabulky, které se vybírají pomocí poddotazu. V poddotazu vybíráme pouze ty řádky z objednávek tabulka, jejíž datum_objednávky je stejný jako v prodeji tabulka.

Potřebujete nástroj pro vytváření sestav pro MySQL? Ubiq usnadňuje vizualizaci dat během několika minut a sledování na řídicích panelech v reálném čase. Vyzkoušejte to ještě dnes!

  1. Java SQL ERROR:Relation Table_Name neexistuje

  2. Jak funguje funkce UCASE() v MySQL

  3. Jak vypočítat věk (v letech) na základě data narození a getDate()

  4. Návrh databáze pro vícejazyčné aplikace