SQL查询需求:优先取第二表同ID数据且不重复返回ID
正确的SQL查询语句实现需求
要实现获取usuarios表所有记录,且当ID在FichaColab表存在时用nomcompleto替换nome,同时保证ID不重复的需求,不需要用UNION,而是使用LEFT JOIN结合COALESCE函数即可,具体SQL语句如下:
SELECT u.id, COALESCE(fc.nomcompleto, u.nome) AS nome FROM usuarios u LEFT JOIN FichaColab fc ON u.id = fc.id;
语句说明:
LEFT JOIN FichaColab fc ON u.id = fc.id:保留usuarios表的所有记录,同时匹配FichaColab表中相同ID的记录,没有匹配到的记录对应FichaColab的字段会为NULL。COALESCE(fc.nomcompleto, u.nome):优先使用FichaColab表的nomcompleto字段值,当该值为NULL(即ID不存在于FichaColab)时,就使用usuarios表的nome字段值。- 因为是基于
usuarios表的LEFT JOIN,所以返回的ID不会重复,完全符合预期结果。
执行该语句后,返回的结果将与你给出的预期结果一致:
| id | nome |
|---|---|
| 1 | Teste Teste |
| 2 | Teste1 |
| 3 | Teste2 Teste2 |
| 4 | Teste3 |
| 5 | Teste4 Teste4 |
内容的提问来源于stack exchange,提问作者Bruno
相关产品推荐
相关产品推荐

