用于替换模板中多对多表中的多个值的SQL查询
我想在sql查询中转换模板。假设有以下四个表:state、stateProperty、state\u stateProperty和translation: state\u stateproperty用于替换模板中多对多表中的多个值的SQL查询,sql,postgresql,replace,many-to-many,Sql,Postgresql,Replace,Many To Many,我想在sql查询中转换模板。假设有以下四个表:state、stateProperty、state\u stateProperty和translation: state\u stateproperty |---------------------|--------------------| | state_id | stateproperties_id | |---------------------|--------------------| | 1
|---------------------|--------------------|
| state_id | stateproperties_id |
|---------------------|--------------------|
| 1 | 2 |
|---------------------|--------------------|
| 1 | 3 |
|---------------------|--------------------|
|---------------------|------------------|
| id | key | value |
|------|--------------|------------------|
| 2 | ${firstName} | John |
|------|--------------|------------------|
| 3 | ${lastName} | Doe |
|------|--------------|------------------|
stateproperty
|---------------------|--------------------|
| state_id | stateproperties_id |
|---------------------|--------------------|
| 1 | 2 |
|---------------------|--------------------|
| 1 | 3 |
|---------------------|--------------------|
|---------------------|------------------|
| id | key | value |
|------|--------------|------------------|
| 2 | ${firstName} | John |
|------|--------------|------------------|
| 3 | ${lastName} | Doe |
|------|--------------|------------------|
状态
|---------------------|
| id | template |
|------|--------------|
| 1 | template |
|------|--------------|
翻译
|------------|--------------|---------------------------------|
| language | messageId | value |
|------------|--------------|---------------------------------|
| en | template | ${lastName}, ${firstName} alarm |
|------------|--------------|---------------------------------|
其目的是获取一个名为translatedstate的新实体,该实体包含状态的已翻译模板。在本例中,翻译后的模板类似于:“Doe,John alarm”。如何在本机sql中联接多对多表,并将状态模板与其相关状态属性的值进行转换?老实说,我将创建一个小函数,在该函数中循环遍历您的
状态属性
,并用其文本替换找到的通配符字符串
但我在一个查询中找到了一些解决问题的乐趣。我不确定它是否匹配所有特殊情况,但对于您的示例,它是有效的:
${state}
变量替换为statenameid
${
字符串时分割模板字符串。因此它会创建一个以某个通配符开头的新行。请注意,${firstName}
将变为firstName}
,因为字符串分隔符正在被删除FROM
子句的一部分工作,因此整个函数在这里添加了一个连接${
部分,这样以后可以更好地解析和比较它(在6中)键
是拆分字符串的第一个通配符的行。所有其他行都是错误的state_id
分组)。为了获得正确的顺序,我们使用(5)中的行号@这有帮助吗?如果有,请不要忘记投票(这是对作者为您所做的工作的一种荣誉,具有一定的内在可信度)。如果它不仅有帮助,而且完全正确,您应该接受。这表明其他人不需要做任何工作,因为您的问题已经解决。由于我的查询要大得多,我尝试将您的查询集成到我的查询中。但到目前为止,我无法使其工作。错误:t.value列不存在第22行:regexp\u split\u to\u table(t.value,'\$\{')作为split_键,提示:可能您想引用列“sp.value”。错误消息准确地告诉您问题所在:别名t没有列。在我的示例中,t用于表转换。也许您有另一个别名?我理解错误消息,但我只是将您的精确查询复制到我的中。也许我应该更新我的帖子并添加完整的查询。啊,我明白了。这是我的错。使用了行。\u numb在通过表进行扩展之前使用er()函数。因此,在扩展之后,所有元素都获得相同的行号,因此聚合以随机顺序进行。现在,为了避免子查询,我使用了WITH ORDINALITY功能(我认为这是有史以来第一次使用:D)来创建行号。现在看起来不错。