【问题标题】:show max row result sql with 2 'where' conditions显示具有 2 个“where”条件的最大行结果 sql
【发布时间】:2016-05-30 02:29:04
【问题描述】:

我有表 master_pangkat

id_pangkat  name
-----------------
a1          |Chef
a2          |Cleaning Service
a3          |Cashier

我有桌子 peg_pangkat

id nip id_pangkat year
----------------------
1  2001   a2        2012  
2  2001   a3        2015 
3  2012   a1        2016
4  2012   a1        2016

我想显示表 peg_pangkat 的最大 ID,其中 nip = 2001

我试过这段代码

select * from peg_pangkat join master_pangkat on
    peg_pangkat.id_pangkat=master_pangkat.id
    where peg_pangkat.id=(select max(peg_pangkat.id) from peg_pangkat) ;

但它的显示

  • 4 2012 a1 2016

然后当我添加另一个 nip=2001 的 where 条件时 没有结果

     select * from peg_pangkat join master_pangkat on
            peg_pangkat.id_pangkat=master_pangkat.id
            where nip=2001
 and peg_pangkat.id=(select max(peg_pangkat.id) from   peg_pangkat) ;

我想展示的结果是

  • 2 2001 a3 2015

【问题讨论】:

    标签: php mysql sql select


    【解决方案1】:

    您需要在子查询中添加WHERE 子句。

    SELECT  *
    FROM peg_pangkat pp
    INNER JOIN master_pangkat mp
        ON pp.id_pangkat = mp.id
    WHERE
        pp.nip = 2001
        AND pp.id = (SELECT MAX(id) FROM peg_pangkat WHERE nip = pp.nip);
    

    附带说明,您应该在表上使用有意义的别名以提高可读性和可维护性。

    【讨论】:

      【解决方案2】:

      这是另一种方法:

      select *
      from peg_pangkat p join
           master_pangkat m
           on p.id_pangkat = m.id
      where p.nip = 2001
      order by p.id desc
      limit 1;
      

      【讨论】:

      • 只有 p 表显示最大结果并且加入 m 仍然是第一行
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-13
      • 2013-06-25
      • 2019-02-25
      • 1970-01-01
      • 2019-03-09
      相关资源
      最近更新 更多