我有訂單表和包含付款信息的旅行表。這是一種多對多的關係 - 訂單可以分成多次旅行,一次旅行可以有一些訂單的付款信息,有時還可以有訂單。 Trips表中沒有「Zero」記錄 - 所以左鍵連接那個值作爲鍵將返回NULL記錄。我使用SQL 2012按左外連接分組,排除空值
Order table
+----+----------+--------------+
| order_id | trip_nbr | veh_id |
+----+----------+--------------+
| 1 | 12 | 3 |
| 2 | 22 | 6 |
| 2 | 0 | 8 |
| 4 | 25 | 7 |
| 7 | 0 | 11 |
+----+----------+--------------+
Trips table
+----+------------+--------------+
| trip_nbr | payment | veh_id |
+----+------------+--------------+
| 12 | 20.00 | 3 |
| 22 | 123.00 | 6 |
| 22 | 12.50 | 6 |
| 25 | 133.33 | 7 |
+----+------------+--------------+
這裏是我的查詢:
select o.order_id,
t.trip_nbr,
sum(t.payment_amt)
from orders o
left outer join trips t
on o.trip_nbr = t.trip_nbr
group by o.order_id,
t.trip_nbr
結果:
+----+----------+--------------+
| order_id | trip_nbr | sum |
+----+----------+--------------+
| 1 | 12 | 20.00 |
| 2 | 22 | 135.50 |
| 2 | NULL | NULL |
| 4 | 25 | 133.33 |
| 7 | NULL | NULL |
+----+----------+--------------+
的問題是,我得到許多從訂單表的信息,只是支付來自Trips表的信息。所以我不想排除任何訂單記錄(如果我添加子句「WHERE t.trip_nbr不是NULL」) - 但我不想在我的分組中獲得2條記錄 - 一條記錄用於t.trip_nbr是NULL並且它找到匹配的地方。
期望的結果:
+----+----------+--------------+
| order_id | trip_nbr | sum |
+----+----------+--------------+
| 1 | 12 | 20.00 |
| 2 | 22 | 135.50 |
| 4 | 25 | 133.33 |
| 7 | NULL | NULL |
+----+----------+--------------+
我想匹配的記錄ORDER_ID = 2被「概括走」 - 但是保持單身紀錄的order_id = 7的原因是,該表將在後文另加入表和額外的NULL記錄正在創建重複項。
有沒有「旅行」表中的'order_id'雖然 – Lamak
oops-固定加入trip_nbr – tember
它怎麼可能是一個多對多的關係? 'order'表將一個外鍵帶入'trip'表中?多對多關係需要一個連接表,並且不需要或從參與實體表上的外鍵獲益。 –