簡體   English   中英

sql選擇具有多個地址的訂單

[英]sql Select Orders with multiple addresses

我正在嘗試選擇訂單,這些訂單使用相同的addressId向客戶發送至少兩次。

這是我的表結構:

客戶表:

+------------+-----------+
| 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); 

使用這些Query我只得到這樣的結果:

+------------+---------+-----------+
| customerId | orderId | addressId |
+------------+---------+-----------+
|          2 |       2 |         2 |
|          4 |       5 |         4 |
+------------+---------+-----------+

嘗試這個

SELECT customerId FROM customer INNER JOIN (SELECT * FROM  address_order GROUP BY addressId
HAVING (COUNT(addressId) > 1)) AS t1 ON customer.addressId=t1.addressId

我在這里沒有看到order表的用法。 但是,如果要確保訂單表數據和address_order應該包含數據,則可以使用order表。 您可以將查詢編寫為

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

如果您想確保來自customer_order所有orderId都在order表中,那么您可以在最后添加另一個連接

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM