android - 如果不使用 sqlite 中的 row_number() 函数,如何提供相同的函数?
问题描述
如果用户的手机支持 sqlite 3.25.0 或更高版本,则以下查询运行良好。否则,您可以猜到,查询不起作用。如何在不使用 row_number () 函数的情况下转换代码?
SELECT *
FROM
(
SELECT
ROW_NUMBER() OVER (PARTITION BY recipe_name) AS rn,
rt.*
FROM
SyncRecipeIngredientTable sr
JOIN RecipeIngredientTable ri ON ri.recipe_ingredient_id = sr.recipe_ingredient_id
JOIN RecipeTable rt ON rt.recipe_id = sr.recipe_id
WHERE ri.recipe_item_name in ("patates", "soğan", "su")
GROUP by rt.recipe_id
HAVING COUNT(*) >= 3
)
WHERE rn = 1
解决方案
我希望食谱有唯一的名称。如果是这样,则根本不需要外部查询:
SELECT rt.*
FROM SyncRecipeIngredientTable sr JOIN
RecipeIngredientTable ri
ON ri.recipe_ingredient_id = sr.recipe_ingredient_id JOIN
RecipeTable rt
ON rt.recipe_id = sr.recipe_id
WHERE ri.recipe_item_name in ('patates', 'soğan', 'su')
GROUP by rt.recipe_id
HAVING COUNT(*) >= 3;
如果食谱可以有重复的名称,那么您可以使用相关子查询:
WITH rt AS (
SELECT rt.*
FROM SyncRecipeIngredientTable sr JOIN
RecipeIngredientTable ri
ON ri.recipe_ingredient_id = sr.recipe_ingredient_id JOIN
RecipeTable rt
ON rt.recipe_id = sr.recipe_id
WHERE ri.recipe_item_name in ('patates', 'soğan', 'su')
GROUP by rt.recipe_id
HAVING COUNT(*) >= 3
)
SELECT rt.*
FROM rt
WHERE rt.recipe_id = (SELECT MAX(rt2.recipe_id)
FROM rt rt2
WHERE rt2.recipe_name = rt.recipe_name
);
推荐阅读
- sql - 字符串拆分字符串与多列相同的分隔符
- javascript - 突出显示 html 原始文本中的特定文本
- typescript - Reflect.Decorate 不是函数
- python - 美丽的汤提取物循环
- java - Java Reactor中阻塞调用后如何重新抛出错误?
- javascript - 在锚标记触摸加载新网页之前运行屏幕触摸事件
- node.js - mongodb插入对象数组
- android - Viewpager 视图出现并在几分之一秒后显示为空白
- python - 用于 apache 部署的 Django 静态目录
- python - Scraper 只打印最后一页数据而不是所有页面 - BS4