gpt4 book ai didi

mysql : query in a query (subquery) not working

转载 作者:行者123 更新时间:2023-11-29 06:30:31 26 4
gpt4 key购买 nike

我想在一个表上运行 MySQL 查询,然后在该表上运行子查询。我有一个对象列表。每个对象都有一个主要版本和一个次要版本。对于一个对象,我试图找到该对象的“最后版本”:这意味着我想找到该对象的最大值(主要),然后找到最后结果的最大值(次要)。

我构建了一个“测试”MySQL 数据库:

create database test ;  
use test ;

我创建了一个表:

create table test 
(
id int auto_increment,
object varchar(10),
major int,
minor int,
PRIMARY KEY (`id`)
) engine innodb;

我用数据填充此表:

insert into test (object, major, minor) values ('obj1',1,0) ;  
insert into test (object, major, minor) values ('obj1',1,1) ;
insert into test (object, major, minor) values ('obj1',1,2) ;
insert into test (object, major, minor) values ('obj1',2,0) ;
insert into test (object, major, minor) values ('obj1',2,1) ;

我列出表格: 从测试中选择*;

+----+--------+-------+-------+  
| id | object | major | minor |
+----+--------+-------+-------+
| 1 | obj1 | 1 | 0 |
| 2 | obj1 | 1 | 1 |
| 3 | obj1 | 1 | 2 |
| 4 | obj1 | 2 | 0 |
| 5 | obj1 | 2 | 1 |
+----+--------+-------+-------+

5 rows in set (0,01 sec)

第一个查询是获取最大(主要)行:

select * 
from test
where object = 'obj1'
and major = (select max(major) from test);

结果如下:

+----+--------+-------+-------+  
| id | object | major | minor |
+----+--------+-------+-------+
| 4 | obj1 | 2 | 0 |
| 5 | obj1 | 2 | 1 |
+----+--------+-------+-------+

2 rows in set (0,00 sec)

然后我尝试获取次要 0 版本:

select * 
from
(select *
from test
where object = 'obj1'
and major = (select max(major) from test)) as t
where
t.minor = 0 ;

它有效,结果是:

+----+--------+-------+-------+  
| id | object | major | minor |
+----+--------+-------+-------+
| 4 | obj1 | 2 | 0 |
+----+--------+-------+-------+

但我想要最后一个版本,所以我想找到最大(次要),即 1 :

select * 
from
(select *
from test
where object = 'obj1'
and major = (select max(major) from test)) as t
where
t.minor = (select max(minor) from t) ;

我收到错误:

ERROR 1146 (42S02): Table 'test.t' doesn't exist

我不明白为什么它不起作用。

谢谢

最佳答案

select * from test where object = 'obj1' order by major desc, minor desc limit 1;

首先,我们对表进行排序,以便所有具有最大主列值的行排在前面(按主序描述)。如果有任何行具有相同的主要列值,则我们可以通过对主要列具有相似值的行进行排序来“打破联系”,方法是对它们进行排序,以便具有最大次要列值的行排在前面(order by次要描述)。因此,第一行输出将是具有最大主值的行,并且对于该主值是最大的次要值。由于我们只对第一行感兴趣,因此我们将输出限制为一行(限制 1)。

关于mysql : query in a query (subquery) not working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56577785/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com