2014-01-17 55 views
0

我遇到了連接mysql的問題。加入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ý

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Ÿ

1   3  10  2 20 
3   3  90  2 80 

有人知道如何解決它?

+1

結果中沒有重複的記錄。如果你比較所有的列,那麼最後一列有不同的值(20和80在前兩行中是不同的)。 –

+1

請注意,沒有ORDER BY的LIMIT是非常沒有意義的 – Strawberry

+0

你可以通過GROUP BY a.list_id來確定這是不是你想要的。 – NewInTheBusiness

回答

0

additional_extend表中的一個item_id有多個quantity值,這就是爲什麼您在輸出中獲得多行。由於有多個quantity值,你將不得不聚集additional_extend表的quantity列各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 
+0

是的,它工作,但我發現在我的情況下更好的答案,使用JOIN additional_extend b ON(a.item_id = b.item_id AND a.in_id = b.in_id)。無論如何,謝謝你的回答 – user3106988

0

您應該使用GROUP BY,因爲你的原單的查詢顯示了多次相同的ID

+0

它不起作用,但更多的記錄。 – user3106988