加入4个表并在第5个表中更新MySql

时间:2015-12-23 02:41:56

标签: mysql join

我正在尝试加入4个表并更新第5个表

INSERT INTO relation_table(cid,pid,liid,lnid,lgid,l_key)
SELECT  a.cid,
        a.pid,
        b.liid,
        c.lnid,
        d.lang,
        md5("a.cid a.pid b.liid c.lnid d.lang")
FROM links a
        INNER JOIN links_table b
            ON a.lurl = b.lurl
        INNER JOIN lname_table c
            ON a.lname = c.lname
        INNER JOIN lang_table d
            ON a.lang = d.lang
where a.lurl = "google"

主表链接包含其中的所有值,其他3个表是具有自己的id +值的子表,我用它来加入然后在关系表中更新id。

修改

抱歉,我没有提到错误的md5 [错误] 1062 - 重复录入' 78527d845cc56e5d28e019d22565f2d7'对于关键' l_key'当我试图添加1条记录时它的确定但第二条记录不起作用,b.liid在第二条中有所不同......但是它的md5与第一条相同。 它不起作用,我不确定这是否是正确的方法。

请帮忙

2 个答案:

答案 0 :(得分:1)

您目前始终将相同的字符串传递给md5()函数。对于第一条记录,您INSERT没有问题,但只要您尝试插入第二条记录就会出现重复输入错误。

md5("a.cid a.pid b.liid c.lnid d.lang")

我相信你打算根据5个标识符构建一个唯一的字符串。您可以尝试沿着这些方向尝试:

md5(CONCAT(a.cid, a.pid, b.liid, c.lnid, d.lang))

答案 1 :(得分:0)

问题在于md5()函数:

md5("a.cid a.pid b.liid c.lnid d.lang")

这样就会生成固定的“a.cid a.pid b.liid c.lnid d.lang”字符串的md5哈希值。使用

md5(concat(a.cid, a.pid, b.liid, c.lnid, d.lang))

代替。此外,您应该考虑您的查询是否可以多次返回同一组ID。如果是,请在选择中使用distinct关键字。