来自三个不同表的最大值

时间:2016-01-15 11:43:19

标签: mysql sql oledb

我有三个表格如下:

  • table1(ID,JName,XVal,YVal)
  • table2(ID,RName,XVAl,YVal)
  • table3(ID,TName,XValue,YValue)

XValue,YValue,XVal,YVal是数字类型。我希望所有这些表中的XVal和YVal的最大值和最小值。以前我写了以下查询:

Select max(XVal) FROM table1
Select max(XVal) FROM table2
Select max(XValue) FROM table3

最低价值:

Select min(XVal) FROM table1
Select min(XVal) FROM table2
Select min(XValue) FROM table3

通过运行这些查询,我可以得到3个不同的最小值和最大值的结果然后,我可以使用逻辑代码来比较它们并获得最大值和最小值,但我想要的是单个查询,它将执行此操作对我来说 我使用了以下查询:

Select max(XVal) from table1 UNION select max(XVal) from table2 UNION select max(XValue) as XVal from table3 ORDER BY 'MAX(XVal)'DESC LIMIT 1

还有一个:

select max(XVal) as maxval from(select XVal from table1 UNION ALL SELECT XVal from table2 UNION ALL Select XValue from table3) as subquery

但他们都失败了。有人可以帮我这个吗?并指出上述查询不起作用的原因?

3 个答案:

答案 0 :(得分:1)

两个版本中第一个的正确语法是:

Select max(XVal) as max_XVal from table1 UNION ALL
select max(XVal) from table2 UNION ALL
select max(XValue) as XVal from table3
ORDER BY max_XVal DESC
LIMIT 1;

您可以在此处使用UNIONUNION ALL

如果您想要三个表中的最小值和最大值:

SELECT MIN(XVal), MAX(XVal)
FROM
(
    SELECT XVal FROM table1
    UNION ALL
    SELECT XVal FROM table2
    UNION ALL
    SELECT XVal FROM table3
) t123;

答案 1 :(得分:0)

上面的UNION解决方案更好,但值得注意的是,您也可以像这样使用原始查询:

SELECT 
    GREATEST
    (
        (SELECT MAX(XVal) FROM table1),
        (SELECT MAX(XVal) FROM table2),
        (SELECT MAX(XValue) FROM table3)
    )
    LEAST
    (
        (SELECT MIN(XVal) FROM table1),
        (SELECT MIN(XVal) FROM table2),
        (SELECT MIN(XValue) FROM table3)
    )

答案 2 :(得分:0)

在子查询上使用max:

select max(val) from (
  select max(XVal) val from table1
  UNION ALL
  select max(XVal) from table2
  UNION ALL
  select max(XValue) from table3
) x

AFAIK这种语法适用于所有rbdms。