2012-05-22 65 views
1

我试图从两个表中获取最小值(一个返回值)。获取两个表中的最小值

下面的MySQL结构+数据:

table_master

`ID` (Unique) | `Amount` 

1 | 5.8 
2 | 22.1 
3 | 44.22 

table_variants

`table_master_ID` | `Amount` 

1 | 4.11 
1 | 5.12 
1 | 
1 | 
2 | 9.22 
3 | 

与此查询:

SELECT table_master.Amount, table_variants.Amount 
FROM table_master 
LEFT JOIN table_variants ON table_master.ID = table_variants.table_master_ID 
WHERE table_master.ID = 1 

我得到的是这样的:

5.8 | 4.11 
5.8 | 
5.8 | 5.12 
... 

现在我需要两个表的MIN Amount值。 IDtable_master是唯一的,table_variants中的数据是可选的。

我该怎么做?我试图MIN()CASE()但没有成功。

任何提示?

TIA!

+0

没有ü尝试使用'min'在SELECT语句两个结果.. ??? – Addicted

回答

3
SELECT MIN(t.Amount) FROM 
(SELECT Amount FROM table_master WHERE ID = 1 
UNION SELECT Amount FROM table_variants WHERE table_master_ID = 1) AS t 

MySQL UNION Syntax

SELECT MIN(LEAST(table_master.Amount, table_variants.Amount)) 
FROM table_master 
LEFT JOIN table_variants ON table_master.ID = table_variants.table_master_ID 
WHERE table_master.ID = 1 

MySQL LEAST Function

+0

我需要编辑MYSQL UNION语法,但它的工作原理! – frgtv10

+0

金额必须是CAST(AMOUNT as UNSIGNED)'WHERE必须是这样的'AND Amount!=''' – frgtv10

+0

CAST(AMOUNT as UNSIGNED)可能是错误的计算方式,可能会导致错误,因为它忽略非整数数字的一部分。没有它会得到什么结果? – Ruben

1

尝试

SELECT MIN(CASE WHEN table_master.Amount<= table_variants.Amount AND table_variants.Amount IS NULL THEN table_master.Amount ELSE table_variants.Amount END) 
FROM table_master 
LEFT JOIN table_variants ON table_master.ID = table_variants.table_master_ID 
WHERE table_master.ID = 1 

This shows how it works

0

您可以使用UNION到chieve这样的:

SELECT "min from table1", MIN(Amount) FROM table_master 
UNION 
SELECT "min from table2", MIN(Amount) FROM table_variants 
+0

你忘记了他要求ID = 1的那个 –

0

试试这个 -

SELECT LEAST(MIN(a.amount), MIN(b.value)) 
FROM table_master a, table_variants b 
WHERE a.id = b.table_master_ID 
AND a.id = 1;