Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 有没有办法找到自联接表中的最大值?_Mysql_Sql_Join_Self Join - Fatal编程技术网

Mysql 有没有办法找到自联接表中的最大值?

Mysql 有没有办法找到自联接表中的最大值?,mysql,sql,join,self-join,Mysql,Sql,Join,Self Join,这是我当前的查询,将返回行程表中列出的最昂贵的旅行。当然,你可以简单地使用MAX,但我被指示不要使用它 这是我找到的返回我想要的内容的查询。在Trips表中,它包括TripId、StateofTrip(即MA、NC、PA)、TravelMethod(汽车、火车、公共汽车)和成本。因此,输出可能看起来像 SELECT * FROM Trips T1 WHERE T1.Cost NOT IN (SELECT T2.Cost FROM Trips T1, Trips T2 WHERE T1.Cost

这是我当前的查询,将返回行程表中列出的最昂贵的旅行。当然,你可以简单地使用MAX,但我被指示不要使用它

这是我找到的返回我想要的内容的查询。在Trips表中,它包括TripId、StateofTrip(即MA、NC、PA)、TravelMethod(汽车、火车、公共汽车)和成本。因此,输出可能看起来像

SELECT *
FROM Trips T1
WHERE T1.Cost NOT IN (SELECT T2.Cost FROM Trips T1, Trips T2 WHERE T1.Cost > T2.Cost)
我想知道的是,是否有一种方法可以在自连接而不是嵌套子查询中实现这一点。所以像这样开始的事情

987  CA   Plane   2000
如果不显式使用MAX,是否可以执行此操作?如何比较自联接中的值并返回单数最大值

此外,在第一个查询中,是否有人可以解释嵌套的示例?我真的不明白NOT in如何返回所需的结果。

切勿在
FROM
子句中使用逗号。始终使用正确、明确、标准、可读的连接语法

您可以使用
左连接和
其中的
找到最大值:

SELECT * 
FROM Trips T1, Trips T2
....
我认为这是一个荒谬的方法来找到最大值。有很多更好的方法,包括:

SELECT T1.* 
FROM Trips T1 LEFT JOIN
     Trips T2
     ON T2.Cost > T1.Cost
WHERE t2.Cost IS NULL;
将返回最昂贵旅行的查询

“最昂贵的旅行”是指价格/成本最高的旅行,也就是说,可能不止一次旅行同时最昂贵。所以

SELECT T.*
FROM Trips T
ORDER BY T.COST DESC
LIMIT 1;

limit 1
找不到所有成本最高(他们可能想要也可能不想要)的与听力相关的记录,因为我就是这样被教授语法的。谢谢你做笔记。
SELECT *
FROM Trips T1
WHERE NOT EXISTS ( SELECT NULL
                   FROM Trips T2
                   WHERE T2.Cost > T1.Cost )