使用从MySQL中的SELECT上的替换使用列数据引导到不同行的同一输出
这是我要做的事情的简化版本,这表明问题最好。我的数据库看起来像这样:
用户表:
user_id | first_name |
---|---|
1 | bob |
2 | dave |
3 | steven |
设置表:
名称 | 值 |
---|---|
format_string | hello {first_name}! |
现在,我想为每个用户插入的用户数据检索Format_string。 如果我将我的Format_string进行了将我的format_string进行编码,则可以使用:
SELECT first_name,
REPLACE(
"Hello {first_name}!",
"{first_name}",
first_name
)
AS greeting
FROM users
我会得到此输出,这是可以预期的:
first_name | 问候 |
---|---|
鲍勃 | Hello Bob! |
戴夫 | 你好戴夫! |
史蒂文 | 你好史蒂文! |
但是,如果我从设置表中使用format_string,那么
SELECT first_name,
REPLACE(
(SELECT value FROM settings WHERE name = "format_string"),
"{first_name}",
first_name
)
AS greeting
FROM users
我会得到此输出,这绝对不是预期:
first_name | 问候 |
---|---|
鲍勃 | Hello Bob! |
戴夫 | 你好鲍勃! |
史蒂文 | 你好鲍勃! |
有人知道问题所在以及如何解决吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我无法解释问题是什么。您可能已经在数据库引擎中找到了一个错误。我无法访问较新的MariadB(DBFiddle的较新版本似乎破坏了),但是虽然Mariadb 10.3和MySQL 5.5似乎都能提供您的输出,但MySQL 5.6给出了预期的一个,因此找到了错误并修复了错误。
通过连接而不是子查询重写查询似乎在任何引擎中都可以使用:
I can't explain what the problem is. You might have found a bug in the database engine. I don't have access to newer MariaDB (dbfiddle's newer versions seem broken), but while both MariaDB 10.3 and MySQL 5.5 seem to give your output, MySQL 5.6 gives the expected one, so the bug was found and fixed.
Rewriting your query with a join instead of a subquery seems to work in any engine: