我对以下内容感到有些困惑,请问您可以向我们寻求方向吗?
我创建了2个临时表'compare1'和'compare2',我想列出表之间常见的单词。
但是,在每个临时表中,我都有一个数字字段'chunkIdx',它表示单词的位置。我想将我列出的结果限制在该位置的特定范围内。
让我先告诉你我的结果,然后解释他们的错误......
tSpan wLen aSize c1_chunkIdx word tSpan wLen aSize c2_chunkIdx word
5 7 6 0 daa 5 7 6 43 daa
5 8 7 1 baa 5 8 7 44 baa
5 7 6 1 baa 5 7 6 1 baa
在上面列出的结果中,我只想要第3行。因为c2_chunkIDx值在c1_chunkIDx - 5和c1_chunkIDx + 5之间。显然,第1行和第2行将无法通过此测试。
我以为我可以包含类似的东西......
WHERE (c2.chunkIdx BETWEEN (c1.chunkIdx - 5) AND (c1.chunkIdx + 5))
或者也许......
WHERE (c2.chunkIdx >= (c1.chunkIdx - 5) OR c2.chunkIdx <= (c1.chunkIdx + 5))
在我的WHERE子句中,但这样做什么都不返回。字面上没有结果选项卡甚至可以查看空数据集(我正在使用HeidiSQL)。这就像查询从未被解雇过,我甚至没有收到错误消息。
显然我错过了一些东西(除了结果)。
我的完整查询如下所示。
SELECT c1.tSpan, c1.wLen, c1.aSize, c1.chunkIdx AS C1_ChunkIdx, c1.word,
c2.tSpan, c2.wLen, c2.aSize, c2.chunkIdx AS C2_ChunkIdx, c2.word
FROM compare1 c1
INNER JOIN compare2 c2 ON c1.word = c2.word
WHERE (c2.chunkIdx BETWEEN (c1.chunkIdx - 5) AND (c1.chunkIdx + 5))
AND c1.tSpan = c2.tSpan
AND c1.wLen = c2.wLen
AND c1.aSize = c2.aSize
请问,我怎样才能将结果限制在基于c1.chunkIdx字段值的范围内?
感谢您的时间。
答案 0 :(得分:0)
答案似乎是使用变量
SELECT c1.tSpan, c1.wLen, c1.aSize, c1.chunkIdx AS C1_ChunkIdx, c1.word,
c2.tSpan, c2.wLen, c2.aSize, c2.chunkIdx AS C2_ChunkIdx, c2.word
, @lowChunk := (c1.chunkIdx - 5)
, @highChunk := (c1.chunkIdx + 5)
FROM compare1 c1
INNER JOIN compare2 c2 ON c1.word = c2.word
WHERE c2.chunkIdx BETWEEN @lowChunk AND @highChunk
AND c1.tSpan = c2.tSpan
AND c1.wLen = c2.wLen
AND c1.aSize = c2.aSize
这似乎给了我我需要的东西。我不是一个强大的SQL人,所以我无法解释为什么会这样。