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
我正在连接两个表,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