gpt4 book ai didi

MySQL ORDER BY CASE 但保留重复项

转载 作者:行者123 更新时间:2023-11-29 01:57:00 25 4
gpt4 key购买 nike

我有一个格式为

的数据库
| Field      | Type             | Null | Key | Default | Extra          |
| word | varchar(60) | NO | | NULL | |
| english_id | int(10) unsigned | NO | PRI | NULL | auto_increment |


| word | english_id |
| the | 1 |
| of | 2 |
| and | 3 |
| a | 4 |
| to | 5 |
| in | 6 |
| ant | 7 |
| be | 8 |
| that | 9 |
| was | 10 |

我希望能够按输入的顺序排序,同时保留重复项。因此,如果他们输入 "a cat and a dog",我将通过下面的 SQL 查询获得正确的顺序。问题是因为我使用了两次 a ,所以第二个 a 没有出现。如何在输出中按顺序保留重复值?这是当前查询。

select english_id, word from english where word in ("Here", "are", "are", "dogs")
order by CASE word
WHEN "here" then 1
WHEN "are" then 2
WHEN "are" then 3
WHEN "dogs" then 4
END;

这是它的输出

| english_id | word |
| 131 | here |
| 26 | are |
| 1679 | dogs |

我希望它看起来像这样

| english_id | word |
| 131 | here |
| 26 | are |
| 26 | are |
| 1679 | dogs |

最佳答案

要让 are 出现两次,您需要加入 are 出现两次的“表”。你可以得到这样的表:

SELECT 'Here'
UNION ALL SELECT 'are'
UNION ALL SELECT 'are'
UNION ALL SELECT 'dogs'

只需将您的 english 表加入到查询中,它应该可以正常工作:

SELECT english_id, english.word
FROM english
JOIN (
SELECT 'Here' AS word
UNION ALL SELECT 'are'
UNION ALL SELECT 'are'
UNION ALL SELECT 'dogs') WordsToSearch ON english.word = WordsToSearch.word
ORDER BY CASE word
WHEN "here" then 1
WHEN "are" then 2
WHEN "are" then 3
WHEN "dogs" then 4
END;

您还可以在单​​词列表中指定顺序信息以稍微简化查询:

SELECT english_id, english.word
FROM english
JOIN (
SELECT 'Here' AS word, 1 AS word_order
UNION ALL SELECT 'are', 2
UNION ALL SELECT 'are', 3
UNION ALL SELECT 'dogs', 4) WordsToSearch ON english.word = WordsToSearch.word
ORDER BY WordsToSearch.word_order;

附录

OP 在最初发布的查询中遇到了问题,因为查询第一行中的 word 列没有别名,并且非常友好地在评论中发布了更新后的查询。上面的查询已针对此修复进行了更新。

关于MySQL ORDER BY CASE 但保留重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26166752/

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