[英]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.