我有四张桌子:
表格订单:
o_id o_c_id o_type o_date
1 23 TA 2015-01-01
2 24 TA 2015-01-16
3 25 GA 2015-01-08
4 26 TA 2016-01-24
5 26 FB 2016-01-28
表客户:
c_id c_name c_email
23 Ander xxx@gmail.com
24 Kay xxx@gmail.com
25 Bob xxx@gmail.com
26 Devi xxx@gmail.com
表服务:
s_o_id s_name s_nr s_amount
1 SGHH 75454645 350
1 SGHH 75454645 420
2 TAK 74322411 214
3 BGH 74288442 850
表外部:
ext_id ext_name ext_nr ext_amount
1 Gerry 75454645 350
1 Gerry 75454645 420
2 Alby 74322411 214
3 Alby 74288442 850
结果应如下所示:
| c_name | o_date | ext_name | ext_nr | s_nr | ext_amount | s_amount |
|----------|---------------|----------|----------|-----------|------------|----------|
| Ander | 2016-09-19 | Gerry | 75454645 | 75454645 | 760 | 730 |
我的查询:
SELECT c.c_name
, o.o_date
, s.s_name
, ext.ext_nr
, s.s_nr
, SUM(ext.ext_amount)
, SUM(s.s_amount)
FROM orders o
JOIN customer c
ON o.c_id = c.c_id
JOIN services s
ON s.o_id = o.o_id
RIGHT
JOIN external ext
ON ext.ext_nr = s.s_nr
GROUP
BY s.s_nr;
返回的不同nr的金额总和不正确,我认为是因为连接。
答案 0 :(得分:0)
您应该使用JOIN
(默认为INNER JOIN),并添加group by子句中的所有列,但聚合列除外:
SELECT c.c_name
, o.o_date
, s.s_name
, ext.ext_nr
, s.s_nr
, SUM(ext.ext_amount)
, SUM(s.s_amount)
FROM orders o
JOIN customer c
ON o.c_id = c.c_id
JOIN services s
ON s.o_id = o.o_id
JOIN external ext
ON ext.ext_nr = s.s_nr
GROUP BY
c.c_name
, o.o_date
, s.s_name
, ext.ext_nr
, s.s_nr;
有关在sql click here
中使用联接的更多信息答案 1 :(得分:0)
外部和服务之间的连接有2行,链接到相同的共享值75454645.这将在结果集中产生额外的行(我认为总共4行中的6行)。