首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >MySQL选择、子查询等

MySQL选择、子查询等
EN

Stack Overflow用户
提问于 2016-08-04 17:30:44
回答 1查看 49关注 0票数 0

我遇到了一个“复杂”选择的问题。我有不同的表(每年一个),它们看起来像:

去年:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ShortName  LongName  Year
Nam1       Name One  2016
Nam2       Name Two  2016
...
Namn       Name N    2016

2015年

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ShortName  LongName       Year
Nam1       Name AltOne    2015
Nam4       Name AltFour   2015
...
Namn       Name AltN      2015

也就是说,当一个人在两年(或更长时间)内出现时,观察值具有相同的ShortName,但LongName可能每年都不同。这些个体可能(也可能不)在这些年中重复出现。

我想为所有表中的所有个人选择最新的LongName。我的意思是,个人Nam1将于2016年和2015年面世。我想选择她最后一个可用的LongName,即'Name One‘。这同样适用于Nam2。

Nam4不会在2016年出现,但会在2015年出现,所以我想选择'Name AltFour‘。

最后的选择将是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ShortName    LongName      Year
Nam1         Name One      2016
Nam2         Name Two      2016
Nam4         Name AltFour  2015
Namn         Name N        2016

我有2016到2013年的表格。非常感谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-04 18:09:41

像这样的东西应该是有效的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- Create a temporary singular table of the shared fields.
-- Ideally, the actual table probably should've looked something like this.
DROP TEMPORARY TABLE IF EXISTS tmpAll;
CREATE TEMPORARY TABLE `tmpAll`
SELECT ShortName, LongName, `Year` FROM table2016
UNION SELECT ShortName, LongName, `Year` FROM table2015
UNION SELECT ShortName, LongName, `Year` FROM table2014
UNION SELECT ShortName, LongName, `Year` FROM table2013
;

-- Find the most recent years for each name.
-- This could have just been a subquery of the next/last query; but...
-- MySQL does not support queries that reference a TEMPORARY table more than once.
DROP TEMPORARY TABLE IF EXISTS tmpRecents;
CREATE TEMPORARY TABLE `tmpRecents`
SELECT Shortname, MAX(`Year`) AS `Year` 
FROM tmpAll
GROUP BY ShortName
;

-- Get the tmpAll records for the most recent year of each ShortName
SELECT tmpAll.*
FROM tmpAll INNER JOIN `tmp` USING (ShortName, `Year`)
;

-- You can DROP the temporary tables here, or 
-- they will just go away when the connection is closed.

如果它很慢,您可以向临时表添加一个(ShortNameYear)索引。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38773858

复制
相关文章
MySQL子查询
在SQL语言中,一个SELECT-FROM-WHERE语句称为一个查询块。当获得一个查询的答案需要多个步骤的操作,首先必须创建一个查询来确定用户不知道但包含在数据库中的值,将一个查询块嵌套在另一个查询块的WHERE字句或HAVING短语的条件中查询块称为子查询或内层查询。上层的查询块曾为父查询或外层查询。子查询的结果作为输入传递回“父查询”或“外部查询”。父查询将这个值结合到计算中,以便确定最后的输出。
星哥玩云
2022/09/15
4.9K0
MySQL子查询
MySQL 子查询
如果一个select语句能够返回单个值或者一列值,且该select语句嵌套在另一个SQL语句中,那么该select语句称为子查询,通常将子查询写在小括号内。
技能锦囊
2020/05/13
2.8K0
【mysql】子查询
子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入。
兮动人
2022/03/27
3.5K0
MySQL 子查询
子查询也称为内查询(Inner Query),必须位于括号之中。包含子查询的查询称为外查询(Outer Query)。子查询支持多层嵌套,也就是子查询可以包含其他子查询。
恋喵大鲤鱼
2023/10/12
2700
mysql子查询
在一个表表达中可以调用另一个表表达式,这个被调用的表表达式叫做子查询(subquery),我么也称作子选择(subselect)或内嵌选择(inner select)。子查询的结果传递给调用它的表表达式继续处理。
崔笑颜
2020/06/08
4.4K0
MySQL 子查询 嵌套查询
意思就是内层的select查到了(至少查到了一行)才进行查询,没有查到就不进行查询。
宁在春
2022/10/31
12.1K0
说说 MySQL 子查询
前两天开发找DBA解决一个含有子查询的慢sql,我们通过将其修改为关联查询和添加索引解决。考虑到 大多数开发并没有准确的理解 MySQL 的子查询执行原理。本文介绍如何解决子查询慢查的思路。
用户1278550
2021/04/25
2.8K0
说说 MySQL 子查询
sql 子查询(mysql)
子查询 可以分为: 单行单列(就是一个值) 单行多列(就是有一行,这一行有很多不同列数据) 多行单列(同一列不同的数据) 多行多列(可以说就是一张表了吧)
1_bit
2020/10/23
3K0
MySQL(联合查询、子查询、分页查询)
2.每列的数据类型必须一致,【查询语句1中字段列表的类型必须和查询语句2中的字段列表类型对应且一致】
全栈开发日记
2022/05/12
16.4K0
MySQL(联合查询、子查询、分页查询)
MySQL基础-子查询
分类方式1: 按内查询的结果返回一条还是多条记录,将子查询分为 单行子查询 、 多行子查询
用户9645905
2023/03/25
2.7K0
MySQL基础-子查询
mysql的查询、子查询及连接查询
一、mysql查询的五种子句 where(条件查询)、having(筛选)、group by(分组)、order by(排序)、limit(限制结果数) 1、where常用运算符: 比较运算符 > , < ,= , != (< >),>= , <= in(v1,v2..vn) between v1 and v2 在v1至v2之间(包含v1,v2) 逻辑运算
java达人
2018/01/31
12.4K0
MySQL(八)子查询和分组查询
例如:select user_id from usertable where mobile_no in (select mobile_no from mobile where mobile_id = '10086');
allsmallpig
2021/02/25
3.9K0
MySQL子查询,联结表
子查询:嵌套在其他查询中;执行顺序由里到外。子查询数目没有限制,如果要使用多层查询,注意写好缩进格式,不要出错。
小末快跑
2019/07/03
4.5K0
MYSQL子查询与连接
本文介绍了MySQL子查询和连接的使用,包括子查询的语法结构、返回值和多表更新等方面,并提供了相关示例。同时,还介绍了如何使用INNER JOIN、LEFT JOIN和OUTER JOIN进行表连接,并给出了示例。
别先生
2017/12/29
3.8K0
MYSQL子查询与连接
【MySQL】02_子查询与多表查询
指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入。
鸡先生
2022/10/29
2.8K0
【MySQL】02_子查询与多表查询
MySQL数据高级查询之连接查询、联合查询、子查询[通俗易懂]
1、交叉连接:CROSS JOIN 把表A和表B的数据进行一个NM的组合,即笛卡尔积。如本例会产生44=16条记录,在开发过程中我们肯定是要过滤数据,所以这种很少用。
全栈程序员站长
2022/08/10
6.2K0
MySQL数据高级查询之连接查询、联合查询、子查询[通俗易懂]
mysql&nbsp;子查询(完整)
1 select * from goods where goods_id = 最大的gooods_id;
明明如月学长
2021/08/27
8820
【MySQL】多表联合查询、连接查询、子查询「建议收藏」
内连接:[inner] join:从左表中取出每一条记录,去右表中与所有的记录进行匹配: 匹配必须是某个条件在左表中与右表中相同最终才会保留结果,否则不保留.
全栈程序员站长
2022/08/02
4.9K0
【MySQL】多表联合查询、连接查询、子查询「建议收藏」
MySQL 子查询优化源码分析
子查询定义在一个完整的查询语句中包含的子查询块被称为子查询。通常情况下,我们可以将出现在SELECT、WHERE和HAVING语法中的子查询块称为嵌套子查询,出现在FROM语法后的子查询块称为内联视图或派生表。
终码一生
2022/04/14
2K0
MySQL 子查询优化源码分析
Mysql数据库-子查询
在上面的执行示例中,我们已经了解到了什么是子查询。那么子查询可以按照查询返回的不同结果,进行一些简单的分类,如下:
Devops海洋的渔夫
2022/01/17
45.6K0

相似问题

在单一MySQL查询中选择父、子、子等

32

MySQL选择子查询

23

MySQL子查询选择

10

MySQL选择帮助;子查询?

20

MySQL子选择查询优化

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文