Mysql 选择内部联接上的最小值

Mysql 选择内部联接上的最小值,mysql,sqlsrv,Mysql,Sqlsrv,我在选择最小值时遇到一些问题。我创建了带有2个表的内部联接,并在SQL查询中进行了简单的计算。现在我想从计算中选择最小值。这是我的问题 $sql = "SELECT jobmatl_mst.item as item2,jobmatl_mst.u_m, job_mst.item, jobmatl_mst.job, jobmatl_mst.item as item2, jobmatl_mst.description, jobmatl_mst.matl_qty_conv , itemwhse_mst

我在选择最小值时遇到一些问题。我创建了带有2个表的内部联接,并在SQL查询中进行了简单的计算。现在我想从计算中选择最小值。这是我的问题

 $sql = "SELECT jobmatl_mst.item as item2,jobmatl_mst.u_m, job_mst.item, jobmatl_mst.job, jobmatl_mst.item as item2, jobmatl_mst.description, jobmatl_mst.matl_qty_conv , itemwhse_mst.item  as whseitem,itemwhse_mst.qty_on_hand, itemwhse_mst.qty_on_hand / jobmatl_mst.matl_qty_conv as total 
FROM job_mst 
INNER JOIN jobmatl_mst ON job_mst.job=jobmatl_mst.job 
INNER JOIN itemwhse_mst ON jobmatl_mst.item=itemwhse_mst.item 
WHERE job_mst.item ='601010944003' AND job_mst.type='S'
ORDER BY total";

我想找到“total”的最小值。

更新:以下解决方案是特定于MySQL的。
最简单的答案是,在查询结束时使用
orderbytotal LIMIT 1
,这与您自己的代码非常接近

$sql = "
    SELECT 
        jobmatl_mst.item as item2,
        jobmatl_mst.u_m, 
        job_mst.item, 
        jobmatl_mst.job, 
        jobmatl_mst.item as item2, 
        jobmatl_mst.description, 
        jobmatl_mst.matl_qty_conv , 
        itemwhse_mst.item  as whseitem,
        itemwhse_mst.qty_on_hand, 
        itemwhse_mst.qty_on_hand / jobmatl_mst.matl_qty_conv as total 
    FROM job_mst 
    INNER JOIN jobmatl_mst 
        ON job_mst.job=jobmatl_mst.job 
    INNER JOIN itemwhse_mst 
        ON jobmatl_mst.item=itemwhse_mst.item 
    WHERE 
        job_mst.item ='601010944003' AND 
        job_mst.type='S'
    ORDER BY total # Sort the result in a 
                   # way that lowest is first and highest is last
    LIMIT 1 # Then we need the first value
";
也可以使用聚合函数
MIN()
分组方式

$sql = "
    SELECT 
        jobmatl_mst.item as item2,
        jobmatl_mst.u_m, 
        job_mst.item, 
        jobmatl_mst.job, 
        jobmatl_mst.item as item2, 
        jobmatl_mst.description, 
        jobmatl_mst.matl_qty_conv , 
        itemwhse_mst.item  as whseitem,
        itemwhse_mst.qty_on_hand, 
        MIN(itemwhse_mst.qty_on_hand / jobmatl_mst.matl_qty_conv) as min_total 
    FROM job_mst 
    INNER JOIN jobmatl_mst 
        ON job_mst.job=jobmatl_mst.job 
    INNER JOIN itemwhse_mst 
        ON jobmatl_mst.item=itemwhse_mst.item 
    WHERE 
        job_mst.item ='601010944003' AND 
        job_mst.type='S'
    GROUP BY
        jobmatl_mst.item as item2,
        jobmatl_mst.u_m, 
        job_mst.item, 
        jobmatl_mst.job, 
        jobmatl_mst.item as item2, 
        jobmatl_mst.description, 
        jobmatl_mst.matl_qty_conv , 
        itemwhse_mst.item  as whseitem,
        itemwhse_mst.qty_on_hand 
";

请注意,在这种情况下,除了具有聚合函数的列之外,所有列都位于
GROUP BY
子句中。

只需在
order BY
之后添加
limit 1
。您需要查看@GordonLinoff。。对不起,先生,我可以在哪里设置限制1?我仍然是SQL语句的业余爱好者这里有些不对劲。我尝试在SQL server中使用LIMIT1。。有些事情没有接近极限。。。但是我尝试了聚合函数MIN(),查询是可以的。@MuhammadYusufAhmadShahRudd对不起,上面的查询是针对MySQL的,不是针对SQL的Server@MuhammadYusufAhmadShahRudd在这种情况下,SQL Server等价于
LIMIT
的是
TOP
,它在
SELECT
之后使用,例如:
selecttop1somevalue…