sql >> Databasteknik >  >> RDS >> Mysql

Hur man visar rader som inte finns i en annan tabell i MySQL

Ibland kan du behöva hitta rader som inte finns i en annan tabell eller välja rader som inte finns i en annan tabell. I den här artikeln kommer vi att titta på hur man visar rader som inte finns i en annan tabell i MySQL, med hjälp av NOT EXISTS-satsen.


MySQL FINNS INTE klausul

MySQL tillhandahåller EXISTS-, UNION- och NOT EXISTS-satser som hjälper dig att utföra SET-operationer med MySQL-tabeller. Med SET-operationer menar vi att du kan behandla MySQL-tabeller &frågeresultat som matematiska uppsättningar och välja rader som finns i båda tabellerna, eller bara en av tabellerna. För vår artikel kommer vi att använda NOT EXISTS-satsen.


Hur man visar rader som inte finns i en annan tabell

Här är stegen för att hitta rader som inte finns i en annan tabell. Låt oss säga att du har två tabeller försäljning(id, order_date, summa) och order(id, order_date, summa)

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

Här är SQL-frågan för att välja data från försäljning tabell som inte finns i order bord.

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 ovanstående fråga använder vi NOT EXISTS-satsen för att välja rad från försäljning tabell som inte finns i order tabell, som väljs med hjälp av subquery. I underfrågan väljer vi bara de raderna från order tabell vars orderdatum är samma som i försäljning bord.

Behöver du ett rapporteringsverktyg för MySQL? Ubiq gör det enkelt att visualisera data på några minuter och övervaka i realtidsinstrumentpaneler. Prova det idag!

  1. Hur man fixar "MySQL ERROR 1819 (HY000):" i Linux

  2. Det går inte att ansluta postgreSQL till psycopg2

  3. Hur skapar man tabell med SQLite-databas i Android?

  4. MySQL strippar icke-numeriska tecken för att jämföra