mysql 一个SELECT语句,用于迭代子查询的所有行,并为每行(“r”)返回一个值,该值是由“r”通知的进一步查询的结果

ubby3x7f  于 2022-11-21  发布在  Mysql
关注(0)|答案(1)|浏览(109)

在MySQL中,是否可以在SELECT语句中迭代子查询的所有行,并为每一行(“r”)返回一个值,该值是由“r”通知的进一步查询的结果?
例如,如果我有一个朋友的出生日期表,我如何从另一个名人的出生日期表中得到与每个朋友的出生日期接近的最近的名人的生日?
http://www.sqlfiddle.com/#!9/a5d62f
我希望生成一个包含以下行的matching_birth_dates表:
| 标识符|著名名称|好友姓名|著名dob|好友_dob|
| - -|- -|- -|- -|- -|
| 一个|大卫·贝克汉姆|莎拉·霍兰德|1980年1月5日|一九八一年二月七日|
| 2个|大卫·林奇|约翰·史密斯|1960年5月2日|一九五九年六月二日|
| 三个|大卫·贝克汉姆|无名氏|1980年1月5日|一九七二年四月二日|

aamkag61

aamkag611#

您可以先在子查询中找出最接近的名人,然后在外部查询中取得该人和名人:

select friend.id, f.name, friend.name, f.dob, friend.dob
from (
  select fa.id, fa.name, fa.dob, min(abs(datediff(fa.dob, fr.dob))) as diff
  from famous_birth_dates fa
    join friends_birth_dates fr on 1=1
  group by fa.id, fa.name, fa.dob
) as f
  join friends_birth_dates friend on f.diff = abs(datediff(f.dob, friend.dob))
order by friend.id

请参阅数据库sqlfiddle

相关问题