我有以下表格:
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存在于第二个表中,则返回第二个表的名称而不是第一个表的名称。下面是我想要的结果:
<表类>id 省 tbody><<tr>1 证人证人 2Teste1 3 Teste2 Teste2 4Teste3 5Teste4 Teste4 表类>
您可以在两个表之间使用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
点击这里查看演示。
这应该可以完成工作:
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
演示