2013-04-24 89 views
0

更新:非常感謝你們。你有我的upvotes。我的問題似乎完全是另一回事。mySQL加入參考父代碼

我試圖從TBL_INVTY中獲得總數(數量),但我無法正確地將此表與TBL_ITEM連接起來。有這個專欄PARENT_CODE,使我的事情變得複雜。讓我更好地解釋它是這樣的...

TBL_ITEM

+------+-------------+ 
| CODE | PARENT_CODE | 
+------+-------------+ 
| 2 |  NULL | 
| 2A |   2 | 
| 2B |   2 | 
| 3 |  NULL | 
| 4 |  NULL | 
+------+-------------+ 

TBL_INVTY

+------+-----+ 
| CODE | QTY | 
+------+-----+ 
| 2 | 2 | 
| 2A | 4 | 
| 2B | 1 | 
| 3 | 3 | 
| 4 | 5 | 
+------+-----+ 

而且,抵達此:

+------+-----+ 
| CODE | QTY | 
+------+-----+ 
| 2 | 7 | 
| 3 | 3 | 
| 4 | 5 | 
+------+-----+ 
+0

是怪異的結果,從你回來。它確實在sql小提琴中工作。你的表模式是什麼? – sel 2013-04-24 06:27:10

+0

對不起。我仍然試圖弄清楚爲什麼我不能用我真正的模式來完成這項工作。我的例子很像它。 – esandrkwn 2013-04-24 06:56:16

回答

2

一個粗略的猜測,這是如何可能的工作是:

SELECT IFNULL(tbl_item.parent_code, tbl_invty.code) AS t_code, SUM(qty) AS t_qty 
    FROM tbl_invty 
    LEFT JOIN tbl_item ON tbl_invty.code=tbl_item.code 
    GROUP BY t_code 

此處的關鍵是使用IFNULL在父ID之間進行選擇,如果不存在,則使用常規ID。

+0

我會更新我的帖子,以顯示我從這一個中得到了什麼。 – esandrkwn 2013-04-24 06:01:57

1

試試這個,

SELECT CONVERT(code, SIGNED) as code ,sum(QTY) from TBL_INVTY group by CONVERT(code, SIGNED); 

SQL Fiddle Demo

+0

哇,請你解釋一下如何在查詢中不提及tbl_item和parent_code?雖然我無法在phpmyadmin中爲它工作。 – esandrkwn 2013-04-24 06:17:37

+0

查看'sqlfiddle demo' – 2013-04-24 06:19:45

+0

這個解決方案在你需要擺脫父代碼時很有用。 – 2013-04-24 06:20:33

1

SQLFIDDLE demo

select CASE WHEN TBL_ITEM.PARENT_CODE IS NOT NULL 
     THEN 
     TBL_ITEM.PARENT_CODE 
     ELSE 
     TBL_ITEM.code 
     END, SUM(Qty) 
FROM 
TBL_INVTY 
join TBL_ITEM on TBL_INVTY.code=TBL_ITEM.code 

GROUP BY 
CASE WHEN TBL_ITEM.PARENT_CODE IS NOT NULL 
     THEN 
     TBL_ITEM.PARENT_CODE 
     ELSE 
     TBL_ITEM.code 
     END