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!