加入mysql输出

时间:2014-01-17 09:50:33

标签: mysql join duplicates

我遇到加入mysql的问题。

我在mysql上有3个表:

item_extend:
list_id item_id in_id out_id quantity 
1       3       1     NULL  10      
2       4       1     NULL  30  
3       3       2     NULL  90  
4       4       2     NULL  70  


Additional_extend:
id   add_id     in_id   out_id  item_id quantity 
1       2       1       NULL    3       20
2       2       2       NULL    3       80

progress_in:
in_id   dates                progress_id
1       2014-01-13 11:36:05  1  
2       2014-01-17 10:14:13  1

我使用了这段代码:

SELECT DISTINCT a.list_id, a.item_id, a.quantity AS x, b.add, b.quantity AS y
FROM item_extend a
JOIN additional_extend b ON a.item_id = b.item_id
JOIN progress_in d ON d.in_id = a.in_id
WHERE d.progress_id = "1"
LIMIT 0 , 30

结果是:

list_id item_id x add_id y

1           3        10     2   20
1           3        10     2   80
3           3        90     2   20
3           3        90     2   80

但预期结果应为:

list_id item_id x add_id y

1           3        10     2   20
3           3        90     2   80

任何人都知道如何解决它?

2 个答案:

答案 0 :(得分:0)

quantity表中的一个item_id有多个additional_extend值,这就是您在输出中获得多行的原因。由于有多个quantity值,您必须为每个quantity汇总additional_extend表的items_id列,如下所示:

SELECT a.list_id, a.item_id, a.quantity AS x, b.add_id, SUM(b.quantity) AS y
FROM item_extend a
JOIN additional_extend b ON a.item_id = b.item_id
JOIN progress_in d ON d.in_id = a.in_id
WHERE d.progress_id = 1
GROUP BY a.list_id, a.item_id, x, b.add_id

答案 1 :(得分:0)

您应该使用GROUP BY,因为您的原始查询会多次显示相同的ID