Mysql Union две таблицы с разными значениями
Мне нужно вернуть все значения из одной таблицы, а затем присоединить эту таблицу к другому запросу без дублирования значений. Это мой запрос до сих пор.
CREATE TABLE tmp_tbl (Id INT(11) PRIMARY KEY, Per VARCHAR(30), Des VARCHAR(50), Rol INT(11));
INSERT INTO tmp_tbl(Id, Per, Des, Rol)
SELECT DISTINCT
p.p_id AS Id,
p.p_title AS Per,
p.p_description AS Des,
'' AS Rol
FROM perm p;
SELECT
p.p_id AS Id,
p.p_title AS Per,
p.p_description AS Des,
r.id AS Rol
FROM perm p
LEFT JOIN roles rp
ON p.p_id = rp.p_id
INNER JOIN rol r
ON r.id = rp.r_id AND rp.r_id IN (101)
UNION ALL
SELECT * FROM
tmp_tbl;
DROP TABLE tmp_tbl;
Оператор возвращает все строки из первого оператора select, но дублирует строки в объединении из второго оператора select.
3 ответа
Попробуйте заменить
UNION ALL
с
UNION
union all
не удалит дубликаты.
Вы должны использовать UNION
не UNION ALL
,
По факту UNION
удаляет дубликаты записей (где все столбцы в результатах одинаковы), UNION ALL
не.
Использование UNION DISTINCT
чтобы быть уверенным:
(SELECT p.p_id AS Id, p.p_title AS Per, p.p_description AS Des, r.id AS Rol
FROM perm p
LEFT JOIN roles rp ON p.p_id = rp.p_id
INNER JOIN rol r ON r.id = rp.r_id AND rp.r_id IN (101))
UNION DISTINCT
(SELECT * FROM tmp_tbl);