如何在 SQLite 中的 INSTR() 内连接 Select 查询?

发布于 2025-01-16 13:36:19 字数 821 浏览 1 评论 0原文

我试图按 IN() 子句中的值的顺序对结果集进行排序。

SELECT * FROM CrossReference WHERE cross_reference_id IN (SELECT Id FROM FilteredIds) 

所以我试图找到一个像MySql FIELD()这样的函数。然后我找到了这些答案(答案1答案2)解释了如何使用 INSTR() 在 SQLite 上执行确切的操作。

SELECT *, INSTR(',GDBR10,GDBR5,GDBR30,', ',' || ticker || ',') POS
FROM tbl
WHERE POS>0
ORDER BY POS;

所以它按预期工作,但我想使用选择查询动态填充 ids。我尝试了很多方法,但似乎没有任何效果。这是我尝试的最后一个。它只给了我一个结果行(与第一个filterId相关的结果)。

SELECT *, INSTR (','||(SELECT id FROM FilteredIds)||',', ',' || cross_reference_id || ',') POS FROM CrossReference WHERE POS>0 ORDER BY POS;

所以我想在将 SELECT 查询与其余代码连接时我犯了某种错误。因为当我手动输入过滤后的 ID 时,它会起作用并根据输入的过滤器 ID 返回结果。

I was trying to order a result set by the order of the values in an IN() clause.

SELECT * FROM CrossReference WHERE cross_reference_id IN (SELECT Id FROM FilteredIds) 

So I tried to find a function such as MySql FIELD(). Then I found these answers (answer1, answer2) which explain how to do the exact thing on SQLite using the INSTR().

SELECT *, INSTR(',GDBR10,GDBR5,GDBR30,', ',' || ticker || ',') POS
FROM tbl
WHERE POS>0
ORDER BY POS;

So it's working as expected, but I want to populate the ids dynamically using a select query. I tried many approaches, but nothing seemed to work. Here is the last one I tried. It gave me just one result row (a result related to the first filterId).

SELECT *, INSTR (','||(SELECT id FROM FilteredIds)||',', ',' || cross_reference_id || ',') POS FROM CrossReference WHERE POS>0 ORDER BY POS;

So I guess I'm making some kind of mistake when concatenating the SELECT query with the rest of the code. Because when I manually enter the filtered Ids it works and returns results according to the entered filter ids.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文