mysql - 根据名称字段的 Max(Char_Length) 从联接中的每个组中选择单个记录

标签 mysql greatest-n-per-group

给定一个查询,我在一个表中根据与另一个表的匹配查找“名称”字段,如何才能将匹配保留在第一个具有最长长度的表中?我知道 Max(Char_Length) 可能是找到最长的一个方法,但不确定如何返回它:

http://sqlfiddle.com/#!9/2b8b7fa/3

Select ID,T1.Name from ShortNames T1
Inner Join LongNames T2
On T2.Name Like Concat('% ', T1.Name)
or T2.Name like Concat(T1.Name,' %')

最佳答案

如果您需要所有列,您可以检查子选择中的最大长度

  Select ID,T1.Name 
  from ShortNames T1
  Inner Join LongNames T2
  On T2.Name Like Concat('% ', T1.Name)
  or T2.Name like Concat(T1.Name,' %')

  where length(T1.Name from) = (
    Select max(length(T1.Name from)) 
    FROM ShortNames T1
    Inner Join LongNames T2
    On T2.Name Like Concat('% ', T1.Name)
    or T2.Name like Concat(T1.Name,' %')
  )

关于mysql - 根据名称字段的 Max(Char_Length) 从联接中的每个组中选择单个记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49844236/

相关文章:

php - 插入每个数据不同的行 PDO

MySQL CrossTab 并删除重复项

mysql - 如何使用自连接选择最小值和最大值

sql - 选择 Distinct On while Order By a different column

sql - 选择所有线程并按最新线程排序

mysql - 将列别名分配给条件在 sqlite 中不起作用的地方

php - Laravel 5.3 Blade foreach 循环 : show data in loop from two different database eloquent queries

mysql,变音符号的排序

sql - 为每个实体提供最新修订的 mysql 查询

sql - 使用无序字段作为条件为每个员工选择一行