无法使用从sqlite中的另一个表中获取的多个随机字符串替换字符串
我试图用一个随机字符串替换10条随机记录中的占位符字符串,该字符串的名称取自另一个表,只使用sqlite语句 为了用子查询的结果替换占位符,我做了一个子查询。我认为每个子查询都从names表中加载了一个随机名称,但我发现情况并非如此,每个占位符都被替换为相同的字符串无法使用从sqlite中的另一个表中获取的多个随机字符串替换字符串,sqlite,Sqlite,我试图用一个随机字符串替换10条随机记录中的占位符字符串,该字符串的名称取自另一个表,只使用sqlite语句 为了用子查询的结果替换占位符,我做了一个子查询。我认为每个子查询都从names表中加载了一个随机名称,但我发现情况并非如此,每个占位符都被替换为相同的字符串 select id, (replace (snippet, "%NAME%", (select name from names where gender = "male" ) ) ) as snippet from image
select id, (replace (snippet, "%NAME%", (select
name from names
where gender = "male"
) )
) as snippet
from imagedata
where timestamp is not NULL
order by random()
limit 10
我希望SELECT的每一行在每次调用子查询时都有不同的随机替换
你好,我是%NAME%,这是我的房子
这是%NAME%的车,请告诉我您的想法
相反,每行都有相同类型的替换:
你好,我是大卫,这是我的房子
这是大卫的车,让我知道你的想法
等等
我不确定它是否可以在sqlite中完成,或者是否必须在php中通过两个不同的数据库查询来完成
提前谢谢 子查询中的random似乎只计算一次。
试试这个:
select
i.id,
replace(i.snippet, '%NAME%', n.name) snippet
from (
select
id,
snippet,
abs(random()) % (select count(*) from names where gender = 'male') + 1 num
from imagedata
where timestamp is not NULL
order by random() limit 10
) i inner join (
select
n.name,
(select count(*) from names where name < n.name and gender = 'male') + 1 num
from names n
where gender = 'male'
) n on n.num = i.num
我仍然有同样的问题需要澄清:如果我从imagedata表中请求一行,那么每个请求都会得到适当的替换。否则,如果我一次请求10行,所有行都会从名称表中得到相同的替换。@GarethJax问题是该子查询只计算一次,因为它不依赖于主查询的当前行的值。是的,我现在正在检查它。我将尝试找到一个解决方法。我仍然有相同的问题,即使是查询的最新版本@对于它的工作原理和一个漂亮的代码,现在你能给我解释一下它是如何工作的吗