Понякога може да се наложи да намерите редове, които не присъстват в друга таблица, или да изберете редове, които не присъстват в друга таблица. В тази статия ще разгледаме как да показваме редове, които не присъстват в друга таблица в MySQL, използвайки клауза NOT EXISTS.
Клауза MySQL НЕ СЪЩЕСТВУВА
MySQL предоставя клаузи EXISTS, UNION и NOT EXISTS, които ви помагат да извършвате операции SET с MySQL таблици. Под операции SET имаме предвид, че можете да третирате MySQL таблиците и резултатите от заявките като математически набори и да избирате редове, които присъстват и в двете таблици, или само в една от таблиците. За нашата статия ще използваме клаузата NOT EXISTS.
Как да покажа редовете, които не присъстват в друга таблица
Ето стъпките за намиране на редове, които не присъстват в друга таблица. Да кажем, че имате две таблици sales(id, order_date, amount) и поръчки (идентификатор, дата_на_поръчка, сума)
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 |
+------+------------+--------+
Ето SQL заявката за избор на данни от продажби таблица, която не присъства в поръчки таблица.
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 |
+------+------------+--------+ В горната заявка използваме клауза NOT EXISTS, за да изберем ред от продажби таблица, които не присъстват в поръчки таблица, които се избират с помощта на подзаявка. В подзаявката избираме само тези редове от поръчки таблица, чиято дата_на_поръчка е същото като това в продажби таблица.
Нуждаете се от инструмент за отчитане за MySQL? Ubiq улеснява визуализирането на данни за минути и наблюдение в табла за управление в реално време. Опитайте днес!