需要在sql中连接两个没有重复的表

时间:2017-03-28 05:08:40

标签: sql postgresql

表1

  `s.no | name   |total_price
 ------ | ------ |------------
      1 | kathir |  100'

表2

  `s.no | rent_name   |rent_price| f_key
 ------ | ------ -----|----------|------
      1 | k1          |  10      | 1
      2 | k2          | 20       | 1

我的疑问:

select t1.name,t1.total_price,t1.rent_name,t1.rent_price 
from table1 t1 left join   table2 t1 ON t1.s_no=t2.f_key

结果:

    `s.no | name   |total_price| rent_name | rent_price
    ------| -------|-----------|-----------|------
      1   | kathir |  100      | k1        |  10
      2   |kathir  |  100      | k2        |20

当我计算kathir总价的总和时,它给我200但真实只有100 预期结果:

    `s.no | name   |total_price| rent_name | rent_price
    ------| -------|-----------|-----------|------
      1   | kathir |  100      | k1        |  10
      2   |kathir  |   0      | k2        |20

如果我计算kathir的total_price的总和是给我100和租金名称k1和k2和租金10,20和总和是30 ..如何实现这个

4 个答案:

答案 0 :(得分:0)

尝试我的编辑答案如下

select t2.s_no, t1.name,(case when  ROW_NUMBER() OVER(PARTITION BY f_key ORDER BY t2.s_no asc)  = 1 then t1.total_price else 0 end) as total_price,t2.rent_name,t2.rent_price 
from table1 t1 left join   table2 t2 ON t1.s_no=t2.f_key 

答案 1 :(得分:0)

表1

  `s.no | name   |total_price
 ------ | ------ |------------
      1 | kathir |  100
 ------ | ------ |------------
      2 |mani    |  200

在表1中可以有很多记录

 `s.no | rent_name   |rent_price| f_key
 ------ | ------ -----|----------|------
      1 | k1          |  10      | 1
      2 | k2          | 20       | 1
      3 |k3           | 30       |2
       4|k1            |10        |2

选择t1.name,t1.total_price,t1.rent_name,t1.rent_price     from table1 t1 left join table2 t1 ON t1.s_no = t2.f_key

预期结果:

    `s.no | name   |total_price| rent_name | rent_price
    ------| -------|-----------|-----------|------
      1   | kathir |  100      | k1        |  10
      2   |kathir  |  0         | k2       |20
      3   |mani    |200         |k3         |30
       4   |mani    |0          |k1         |10

答案 2 :(得分:0)

我的最新答案。它根据您的要求工作

android:isIndicator="false"

sqlfiddle的工作链接是http://sqlfiddle.com/#!15/6cf9d

答案 3 :(得分:0)

表1

  `s.no | name   |total_price
 ------ | ------ |------------
      1 | kathir |  100
 ------ | ------ |------------
      2 |mani    |  200
      3  vinoth    300
      4  dinesh    400

在表1中可以有很多记录

 `s.no | rent_name   |rent_price| f_key
 ------ | ------ -----|----------|------
      1 | k1          |  10      | 1
      2 | k2          | 20       | 1
      3 |k3           | 30       |2
       4|k1            |10        |2

选择t2.s_no,t1.name,(当ROW_NUMBER()OVER(PARTITION BY f_key ORDER BY t2.s_no asc)= 1然后t1.total_price else 0 end)为total_price,t2.rent_name,t2.rent_price from table1 t1 left join table2 t2 ON t1.s_no = t2.f_key

结果:

    `s.no | name   |total_price| rent_name | rent_price
    ------| -------|-----------|-----------|------
      1   | kathir |  100      | k1        |  10
      2   |kathir  |  0         | k2       |20
      3   |mani    |200         |k3         |30
       4   |mani    |0          |k1         |10
       5     vinoth  | 300
       6     dinesh  |  0