现在有表1包含字段id,age,money;表2中id,name,表1中id无重复,表二中,id很多重复,因为一个id对应多个name,如:id=1,对应有name有:三丰,张三丰,id=2对应name有:小明,刘小明
现在我想要结果集包含表1的id,money,age,并且关联表2获取name,但是我只要一个name名,而且想要最长的那个名,如何限定条件呢,我之前写的是,max(name),max应该是根据首字母的顺序排的大小,所以id=2选出来是小明而不是刘小明,所以请问如何解决这个问题呢
试试我写的这个,但是也有个问题,如果还有个刘大明,那么长度跟刘小明一样,你要怎么取?
如有帮助,请采纳。
select
t1.id,
t1.money,
t1.age,
t2.name
from 表1 t1
left join
(
select id,name from(
select id,name,
ROW_NUMBER() OVER(partition by id order by length(name) desc) col
from 表2
) b
where col=1
) t2
on t1.id=t2.id
用max(length())可以不
先通过LENGTH()计算出每个id对应的最长的name,通过链接找到这个那么,最后再和表1关联
SELECT
t1.id,
t1.money,
t1.age,
temp.NAME
FROM
t1
LEFT JOIN (
SELECT
a.id,
a.NAME
FROM
t2 AS a
RIGHT JOIN ( SELECT id, max( LENGTH( NAME ) ) AS max_len FROM t2 GROUP BY id ) AS b ON LENGTH( a.NAME ) = b.max_len
AND a.id = b.id
) AS temp ON t1.id = temp.id
有帮助的话请采纳~