注文を選択しようとしていますが、これは同じ住所IDで顧客に少なくとも2回送信されます。sql複数の住所の注文を選択してください
これは私のテーブル構造である:
Customerテーブル:受注へのアドレスのための
+------------+-----------+ | customerId | addressId | +------------+-----------+ | 1 | 1 | | 2 | 2 | | 3 | 3 | | 4 | 4 | +------------+-----------+
は関係
+---------+-----------+ | orderId | addressId | +---------+-----------+ | 1 | 1 | | 2 | 2 | | 3 | 2 | | 4 | 3 | | 5 | 4 | | 6 | 4 | +---------+-----------+
注文表
+----+------------+-------+ | id | orderEntry | total | +----+------------+-------+ | 1 | timestamp | 4711 | | 2 | timestamp | 0815 | | 3 | timestamp | 1337 | +----+------------+-------+
今、私は出力をしたいです好きなこれは:
+------------+---------+-----------+ | customerId | orderId | addressId | +------------+---------+-----------+ | 2 | 2 | 2 | | 2 | 3 | 2 | | 4 | 5 | 4 | | 4 | 6 | 4 | +------------+---------+-----------+
私は、これらのクエリで正しい結果を得るためにしようとしましたが、私はこの方法でアドレスを数えることができないと思います。これらのクエリで
SELECT C.`customerId`, AO.`orderId`, AO`addressId`
FROM customer AS C
JOIN address_order AS AO ON AO.addressId = C.addressId
JOIN order AS O ON O.id = AO.orderId
GROUP BY AO.`orderId`
HAVING (COUNT(AO.`addressId`) > 1);
私はこのような結果を取得:
+------------+---------+-----------+ | customerId | orderId | addressId | +------------+---------+-----------+ | 2 | 2 | 2 | | 4 | 5 | 4 | +------------+---------+-----------+
一般的なグループとして最後に参加あなたは
customer_order
からのすべてのorderId
がorder
テーブルであることを確認したい場合、あなたは別のものを追加することができますとしてクエリを書くことができます"GROUP BY句が指定されている場合、SELECTリストの各列参照は、グループ化列を識別するか、または集合関数の引数でなければなりません!" (古いMySQLはこれを気にせず、任意の結果を返します。新しいMySQLはより厳密で、無効なクエリは実行されません)。 – jarlh