2016-08-18 4 views
1

注文を選択しようとしていますが、これは同じ住所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 | 
+------------+---------+-----------+ 
+0

一般的なグループとして最後に参加あなたはcustomer_orderからのすべてのorderIdorderテーブルであることを確認したい場合、あなたは別のものを追加することができます

select c.customerId, ao.orderId, ao.addressId from customer c join address_order ao on ao.addressId = c.addressId join ( select addressId, count(*) as tot from address_order group by addressId having tot = 2 )x on x.addressId = ao.addressId 

としてクエリを書くことができます"GROUP BY句が指定されている場合、SELECTリストの各列参照は、グループ化列を識別するか、または集合関数の引数でなければなりません!" (古いMySQLはこれを気にせず、任意の結果を返します。新しいMySQLはより厳密で、無効なクエリは実行されません)。 – jarlh

答えて

0

を試してみてください私はここorderテーブルの使用状況を表示されません。ただし、orderテーブルを使用して、注文テーブルのデータとaddress_orderにデータが含まれていることを確認したい場合は、考慮する必要があります。あなたはルールによって

join `order` o on o.id = ao.orderId 
+0

あなたは私の日を救いました –

0

この

SELECT customerId FROM customer INNER JOIN (SELECT * FROM address_order GROUP BY addressId 
HAVING (COUNT(addressId) > 1)) AS t1 ON customer.addressId=t1.addressId 
関連する問題