好的,让我先说明一下。我是SQL的新手,我对此并不了解。我刚刚开始使用它,我一直在努力学习并改进。请解释你说的任何事情,因为我可能不理解常用术语等。
我现在编写的SQL代码就像我想要的那样,但字符串似乎令人讨厌,让我觉得这可能是对的。
INSERT INTO reputations(uuid, warn, bandate, reasons, mods)
VALUES ('{0}', '{1}', '{2}', CONCAT(reasons, '{3}'), CONCAT(mods, '{4}'))
ON DUPLICATE KEY UPDATE warn = '{1}',
bandate = '{2}',
reasons=CONCAT(reasons, '{3}'),
mods=CONCAT(mods, '{4}')
在我的Java代码中,它看起来像这样:
正如你也可能看到的那样,我不知道如何正确地格式化/缩进它以便像这样使用。任何提示将不胜感激。
我还应该解释一下,{n}
只是我用我想要的信息替换它的空格。例如,我用UUID替换所有{0}。
所以,我的问题是。有一个更好的方法吗?任何提示或帮助将不胜感激。干杯!
答案 0 :(得分:1)
我不明白这一部分:
VALUES ('{0}', '{1}', '{2}', CONCAT(reasons, '{3}'), CONCAT(mods, '{4}'))
------------------------------------^
使用列名应该会产生错误。
也许这就是你想要的陈述:
INSERT INTO reputations(uuid, warn, bandate, reasons, mods)
VALUES ('{0}', '{1}', '{2}', '{3}', '{4}')
ON DUPLICATE KEY UPDATE warn = VALUES(warn),
bandate = VALUES(bandate),
reasons = CONCAT(reasons, VALUES(reasons)),
mods = CONCAT(mods, VALUES(mods));
在ON DUPLICATE KEY
部分中,您可以使用VALUES()
从特定列中获取新值。另外,我怀疑你可能真的想要最后两个连接的分隔符:
reasons = CONCAT_WS('; ', reasons, VALUES(reasons)),
mods = CONCAT_WS('; ', mods, VALUES(mods));
如果值CONCAT_WS()
,NULL
的使用会产生很好的副作用 - 它仍将保留其余值。