SQL查询的解释

时间:2016-12-26 18:02:42

标签: mysql sql database

我试图通过MySQl从数据库中的几个表中获取我的JavaFX应用程序的一些数据。

以下是查询:

 select veturattable.id, veturattable.vetura,veturattable.modeli,veturattable.ngjyra,
     veturattable.targa, renttable.pagesa, hargjimettable.shuma 
        from veturattable 
     left join hargjimettable 
        on hargjimettable.veturaid= veturattable.id 
        left join renttable  
     on renttable.veturaid = veturattable.id ; 

以下是可出租的数据

enter image description here

以下是来自hargjimettable的数据

enter image description here

所以我需要的是向我展示这个:

veturaid | pagesa | shuma
1        | 150    | 91
10       | 110    | 40

2 个答案:

答案 0 :(得分:1)

您实际上希望MAX()SUM()一样{/ 1}}

GROUP BY

答案 1 :(得分:1)

实际上,您需要执行两个子查询,预先汇总每个ID的总金额。然后将每个单独连接回主要部分。如果你没有,你就会得到一个笛卡尔积。对于给定ID的hargjimettable表中的每个记录,它与每个金额的租赁表相连。因此,如果第一个表中有2个记录而第二个表中有3个记录,则得到6的倍数。

通过分别使用一个ID密钥预先查询每个分组,每个可能的总和最多只能有一个记录。如果它存在,那么抓住那条记录。左连接可防止某些ID无法显示。使用coalesce()可以防止显示空值。

select 
      v.id, 
      v.vetura,
      v.modeli,
      v.ngjyra,
      v.targa, 
      COALESCE( RSum.SumPagesa, 0 ) as AllPagesa, 
      COALESCE( HSum.SumShuma, 0 ) as AllShuma
   from 
      veturattable v
         left join 
         ( select 
                 h.veturaid,
                 SUM( h.shuma ) as SumShuma
              from 
                 hargjimettable h
              group by
                 h.veturaid ) HSum
           ON v.id = HSum.veturaid
        left join 
        ( select
                r.veturaid,
                SUM( r.pagesa ) as SumPagesa
             from
                renttable r
             group by
                r.veturaid ) RSum
           ON v.id = RSum.veturaid