LEFT JOIN 到 return 仅第一行

LEFT JOIN to return only first row

我正在连接两个表,tab_usuarios(用户)和 tab_enderecos(地址)。

tab_usuarios结构:

id_usuario nome usuario
1 Administrador admin
2 Novo Usuário teste
3 Joao Silva jao

tab_enderecos结构:

id_endereco id_usuario cidade uf
2 1 cidade SP
20 2 Lorena SP
22 2 Lorena SP
24 3 Campinas SP
28 4 Lorena SP

我有一个简单的查询,结果如下:

Select
    u.id_usuario,
    u.usuario,
    u.nome,
    e.id_endereco,
    e.cidade,
    e.uf
From
    tab_usuarios u Left Join
    tab_enderecos e On u.id_usuario = e.id_usuario
id_usuario usuario nome id_endereco cidade uf
1 admin Administrador 2 cidade SP
2 user 2 Novo Usuário 22 Lorena SP
2 user 2 Novo Usuário 20 Lorena SP
3 jao Joao Silva 24 Campinas SP
4 teste fabio 28 Lorena SP

我想要的是,比如id_usuario = 2,我只想带上id_endereco = 20,也就是第一个插入数据库的地址。

我试过 min 和其他几个人。

假设您有 MySql 8.0 而不是某些古老的 5.x 版本:

SELECT * 
FROM (
    SELECT  u.id_usuario, u.usuario, u.nome, e.id_endereco, e.cidade, e.uf,
        row_number() over (partition by u.id_usuario order by e.id_endereco) rn
    FROM tab_usuarios u 
    LEFT JOIN tab_enderecos e On u.id_usuario = e.id_usuario
) t
WHERE rn = 1

在这里查看它的工作原理:

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=c506baf8157f82390bb335d074e7614c