Sql 如何查询两个不同表中两列的最大值?

Sql 如何查询两个不同表中两列的最大值?,sql,Sql,我有一个要求 我有两张桌子,分别是表A和表B。两者都有一个名为“rec_id”的列。我的要求是使用单个查询获取这两列中包含的最大值 例如:在表A中,“rec_id”值为{1,5,6},在表B中,“rec_id”值为{1,4,2}。所以在执行查询之后,我希望得到“6”,因为6是这两个表中这两列的最大值 提前感谢,, 安妮什·库里安 select max(rec_id) from ( (select rec_id from tablea) union all (select rec_id

我有一个要求

我有两张桌子,分别是表A和表B。两者都有一个名为“rec_id”的列。我的要求是使用单个查询获取这两列中包含的最大值

例如:在表A中,“rec_id”值为{1,5,6},在表B中,“rec_id”值为{1,4,2}。所以在执行查询之后,我希望得到“6”,因为6是这两个表中这两列的最大值

提前感谢,, 安妮什·库里安

select max(rec_id) from 
(
  (select rec_id from tablea)
 union all
  (select rec_id from tableb)
) combined

与内森·费格的回答相比,这一点更为突出。

@Bill Karwin有时是运气胜于技能。感谢“与Nathan Feger的回答相比,这会更有效”-不一定;这取决于DB引擎如何处理它。实际上,我认为它的性能会稍差一些,因为您仍然需要扫描两个表中的所有rec_id值,但您的查询必须派生出三个最大值,而Nathan的查询只需派生一个。在索引覆盖的情况下,
rec_id
将不会进行扫描。最大值采用O(1)复杂度。否。由于mysql中的索引是B-Tree,这是一种排序结构,mysql优化器只需一次读取操作即可获取最大值。因此,对于2个索引,它将是2个读取操作和2个整数的非常快的比较。在选中的答案中,它将是fullscan。创建两个表,每个表包含10M条记录,并进行检查。
select max(rec_id) from 
(
  (select MAX(rec_id) AS rec_id from tablea)
 union
  (select MAX(rec_id) AS rec_id from tableb)
) combined