私は注文テーブルと支払い情報を含む旅行テーブルを持っています。これは多対多の関係です。注文は多くの旅行に分かれ、1回の旅行では2つの注文と注文の支払い情報を得ることができます。 Tripsテーブルには「ゼロ」レコードはありません。その値をキーとして左結合するとNULLレコードが返されます。グループバイナリで左外部結合、除外ヌル
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 |
+----+----------+--------------+
問題がある、私が注文テーブルとちょうど支払いからの情報の多くを得る私はここで
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 |
+----+------------+--------------+
は私のクエリでSQL 2012を使用しています情報をTripsテーブルから削除します。だから私は任意の注文レコードを除外したくないです( "WHERE t.trip_nbr is not"という句を追加すると起こります)。しかし私はグループ化に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レコードが重複を作成しています。
なしがありますしかし、 'trips'テーブルの' order_id' – Lamak
oops- trip_nbrで結合するように固定 – tember
どうすれば多対多の関係になりますか? 'order'テーブルは' trip'テーブルに外部キーを持ちますか?多対多の関係は、結合表を必要とし、参加しているエンティティー表の外部キーを必要とせず、またはそれから利益を得ません。 –