合并来自不同表的列并分配到新表

时间:2017-08-10 04:29:03

标签: php mysql

我正在开发一个小项目,我有两个不同的表,显示用户A和B的库存数。请考虑表名相同。在每个表中,我有一个名为count的列,它指示每个用户的相应库存计数。所以:

A.item | A.count     B.item | B.count     C.item | c.count

   XYZ | 25             XYZ | 31             XYZ | 0

我有第三张桌子C,目前有空数。如您所见,项目名称(或ID)对于所有3个表都是通用的。我想要做的是为用户A和B添加计数,然后将其分配给C.所以,我认为我应该做的是;

UPDATE C set count = A.count + B.count WHERE A.item = B.item

显然上面的语法不起作用。到目前为止,我唯一能够实现的目的是通过使用以下代码显示两个表中的相应计数:

SELECT A.count, B.count
FROM A
INNER JOIN B ON A.item = B.id
LIMIT 0 , 30

但是使用上面的代码,我不知道如何继续,因此我可以将A和B的计数相加,然后将其分配给C.count。我尝试在php中使用while循环,并逐行遍历每个计数 - 一遍又一遍地查询,但是它需要很长时间,并且它通常会超时,基于默认的php超时设置。

真的很感激任何帮助。

编辑:Tim已经清楚地回答了上述问题。我想知道,我如何修改Tim的代码,这样,现在我有2列字符串,而不是计数。所以:

A.item | A.comment     B.item | B.comment     C.item | c.comment

   XYZ | 25               XYZ | 31               XYZ | 0

如何修改Tim代码以获取A和B中的注释,并将它们添加到C?我尝试了以下方法:

UPDATE C c
LEFT JOIN A a
    ON a.item = c.item
LEFT JOIN B b
    ON b.item = c.item
SET c.comment = COALESCE(a.comment, 0) + COALESCE(b.comment, 0)

但它似乎并非如此直截了当。我试着查看COALESCE的文档,但是我无法将它与我现在拥有的这个问题联系起来。有什么帮助吗?

2 个答案:

答案 0 :(得分:1)

按项加入三个表,然后将C的计数更新为其他两个的总和。

UPDATE C c
LEFT JOIN A a
    ON a.item = c.item
LEFT JOIN B b
    ON b.item = c.item
SET c.count = COALESCE(a.count, 0) + COALESCE(b.count, 0)

我仅在上述更新中使用了左连接,以防C中的给定项目只有[{1}}而非A的计数,反之亦然。如果您希望仅在BA都有计数的情况下分配计数,则将左连接替换为内连接。

答案 1 :(得分:0)

实际上,继Tim的代码之后,这段代码解决了我更新的问题 - 即加入字符串。

UPDATE C c
LEFT JOIN A a
    ON a.item = c.item
LEFT JOIN B b
    ON b.item = c.item
SET c.comment = CONCAT(c.comment, a.comment, b.comment);