我有以下两个表:
ORDERS_ENTRIES
orders_id | products_id | entry_id | quantity
1111 | 14492 | 1 | 1
1112 | 14492 | 1 | 3
和
PRODUCT_STOCKS
products_id | entry_id | quantity
14492 | 1 | 4
14492 | 1 | 2
我试图通过以下查询找出SUM(ORDERS_ENTRIES.quantity)以及products_stocks的数量:
SELECT
oe.entry_id as entry,
SUM(oe.quantity) as qty,
ps.quantity as ps_qty
FROM
ORDERS_ENTRIES oe
INNER JOIN
PRODUCT_STOCKS ps
ON
oe.entry_id = ps.entry_id;
WHERE
oe.products_id = 14492;
GROUP BY
ps.entry_id;
但由于多对多关系,返回的结果会多次计算金额。
预期答案:
oe.entry_id | oe.quantity | ps.quantity
1 | 4 | 4
1 | 4 | 2
但我得到以下答案:
oe.entry_id | oe.quantity | ps.quantity
1 | 8 | 4
1 | 8 | 2
我该怎么做?
答案 0 :(得分:1)
通过观察,您似乎希望首先按ORDERS_ENTRIES
汇总entry_id
表中的数量,然后将此结果加入PRODUCT_STOCKS
表:
SELECT oe.entry_id,
oe.qty,
ps.quantity AS ps_qty
FROM
(
SELECT entry_id, SUM(quantity) AS qty
FROM ORDERS_ENTRIES
GROUP BY entry_id
) oe
INNER JOIN PRODUCT_STOCKS ps
ON oe.entry_id = ps.entry_id
<强>输出:强>
在这里演示:
答案 1 :(得分:0)
这是因为连接表中有多个匹配记录。您可以避免在子查询中使用group by复制
SELECT
oe.entry_id as entry,
oe.qty,
ps.quantity as ps_qty
FROM
(SELECT entry_id, SUM(quantity) as qty FROM ORDERS_ENTRIES GROUP BY entry_id) AS oe
INNER JOIN
PRODUCT_STOCKS ps
ON
oe.entry_id = ps.entry_id;
WHERE
oe.products_id = 14492;
GROUP BY
ps.entry_id;