2013-04-24 27 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