mysql 不要返回重复的id,优先使用第二个表

eoxn13cs  于 2023-01-16  发布在  Mysql
关注(0)|答案(2)|浏览(190)

我有以下表格:

CREATE TABLE usuarios ( id INT, nome varchar );
INSERT INTO usuarios VALUES
(1, 'Teste'),
(2, 'Teste1'),
(3, 'Teste2'),
(4, 'Teste3'),
(5, 'Teste4'),

CREATE TABLE FichaColab( id INT, nomcompleto varchar );
INSERT INTO FichaColab VALUES
(1, 'Teste Teste'),
(3, 'Teste2 Teste2'),
(5, 'Teste4 Teste4'),

我打算从第一个表中获取所有的名称,但是如果ID存在于第二个表中,则返回第二个表的名称而不是第一个表的名称,下面是我想要的结果:
| 身份证|诺姆|
| - ------|- ------|
| 1个|泰斯特泰斯特|
| 第二章|测试1|
| 三个|测试2测试2|
| 四个|测试3|
| 五个|测试4测试4|
我是这样想的:

SELECT usuarios.id, usuarios.nome
FROM usuarios 
UNION 
SELECT FichaColab.Id, nomcompleto
FROM FichaColab

但这种方法返回两个表中的所有内容,并重复id,但不能。

u5rb5r59

u5rb5r591#

您可以在两个表之间使用LEFT JOIN,然后在名称上使用COALESCE,并优先使用全名。

SELECT u.id, COALESCE(fc.nomcompleto, u.nome) AS nome
FROM      usuarios   u
LEFT JOIN FichaColab fc ON u.id = fc.id

检查here演示。

h43kikqp

h43kikqp2#

这应该可以完成任务:

select * from (
select FichaColab.* from FichaColab left join  usuarios on usuarios.id = FichaColab.id --everithing in table FichaColab 
union 
select usuarios.* from FichaColab right join usuarios on usuarios.id = FichaColab.id where FichaColab.id is null --everithing from usuarios where no record in FichaColab exists
) as unsorted
order by ID --sort it

Demo

相关问题