繁体   English   中英

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

[英]A SELECT statement to iterate over all rows of a subquery and for each row (“r”) return a value that is the result of a further query informed by “r”

在 MySQL 中,是否可以在 SELECT 语句中遍历子查询的所有行,并为每一行(“r”)返回一个值,该值是“r”通知的进一步查询的结果?

例如,如果我有一张朋友的出生日期表,我如何从另一张名人的出生日期表中获取与每个朋友的出生日期接近的最近的名人生日?

http://www.sqlfiddle.com/#!9/a5d62f

我希望生成一个包含以下行的 matching_birth_dates 表:

ID 著名的名字 friend_name 名人 friend_dob
1个 贝克汉姆 萨拉荷兰 1980 年 5 月 1 日 1981 年 7 月 2 日
2个 大卫·林奇 约翰·史密斯 1960 年 2 月 5 日 1959 年 2 月 6 日
3个 贝克汉姆 无名氏 1980 年 5 月 1 日 1972 年 2 月 4 日

您可以先在子查询中找出距离最近的名人,然后在外部查询中获取此人和名人:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM