У меня есть два одинаковых набора данных (таблица, представление, CTE), один из которых содержит уникальные строки (гарантируется DISTINCT
или GROUP BY
), второй содержит дубликаты (без ограничения первичного ключа).
Как я могу получить разницу двух наборов данных, чтобы я мог получить только дубликаты второго набора в MySql 8?
Скажем, у меня есть таблица под названием Животные, в которой хранятся NAME
и SPECIES
.
+---------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| ID | int(11) | NO | PRI | NULL | |
| NAME | varchar(255) | YES | | NULL | |
| SPECIES | varchar(255) | YES | | NULL | |
+---------+--------------+------+-----+---------+-------+
ANIMALS
+----+---------+-------------+
| ID | NAME | SPECIES |
+----+---------+-------------+
| 1 | Lion | Carnivorous |
| 2 | Giraffe | Herbivores |
| 3 | Zebra | Herbivores |
| 4 | Trutle | Herbivores |
| 5 | Tiger | Carnivorous |
| 6 | Bear | Carnivorous |
+----+---------+-------------+
Имея это, я определяю представление DUPLICATED
.
CREATE VIEW DUPLICATED AS
SELECT * FROM ANIMALS
UNION ALL
SELECT * FROM ANIMALS WHERE SPECIES = "Carnivorous";
(Дублирует каждого плотоядного в наборе)
DUPLICATED
+---------+-------------+-----+
| NAME | SPECIES | CNT |
+---------+-------------+-----+
| Lion | Carnivorous | 2 |
| Tiger | Carnivorous | 2 |
| Bear | Carnivorous | 2 |
| Giraffe | Herbivores | 1 |
| Zebra | Herbivores | 1 |
| Trutle | Herbivores | 1 |
+---------+-------------+-----+
Теперь я хочу получить разницу в SELECT * FROM ANIMALS
и DUPLICATED
или наоборот, важно получить всех хищных от ANIMALS
.