gpt4 book ai didi

mysql - 优化在 JOIN 中使用 REGEXP 的 SQL 查询

转载 作者:行者123 更新时间:2023-11-29 01:58:48 26 4
gpt4 key购买 nike

我有以下情况:

表词:

| ID |   WORD |
|----|--------|
| 1 | us |
| 2 | to |
| 3 | belong |
| 4 | are |
| 5 | base |
| 6 | your |
| 7 | all |
| 8 | is |
| 9 | yours |

表句:

| ID |                                  SENTENCE |
|----|-------------------------------------------|
| 1 | <<7>> <<6>> <<5>> <<4>> <<3>> <<2>> <<1>> |
| 2 | <<7>> <<8>> <<9>> |

我想用 Word-Table 中的等效词替换 <<(\d)>>。

所以结果应该是

| ID |                       SENTENCE |
|----|--------------------------------|
| 1 | all your base are belong to us |
| 2 | all is yours |

我想到的是以下 SQL 代码:

SELECT id, GROUP_CONCAT(word ORDER BY pos SEPARATOR ' ') AS sentence FROM (
SELECT sentence.id, words.word, LOCATE(words.id, sentence.sentence) AS pos
FROM sentence
LEFT JOIN words
ON (sentence.sentence REGEXP CONCAT('<<',words.id,'>>'))
) AS TEMP
GROUP BY id

我为此做了一个 sqlfiddle:

http://sqlfiddle.com/#!2/634b8/4

代码基本上是可以运行的,但是我想请教各位高手,有没有在执行计划中不使用派生表或者不使用文件排序的方法。

最佳答案

你应该制作一个每个单词一个条目的表格,这样你的句子(原文如此)可以通过加入该表格来制作。它看起来像这样

SentenceId, wordId, location
2, 7, 1
2, 8, 2
2, 9, 3

按照您设置的方式,您没有利用数据库,基本上是将多个数据点放在 1 个表字段中。

location 字段(将其称为“顺序”很诱人,但由于这是一个 SQL 关键字,所以不要这样做,你会讨厌自己的)可用于对句子进行“排序”。

(您可能想将 sentense 重命名为 sentence?)

关于mysql - 优化在 JOIN 中使用 REGEXP 的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20740669/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com