Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 按顺序抛出带有大小写的SQL请求;(1) 按术语排列的第一顺序与结果集中的任何列都不匹配;_Android_Sql_Sqlite - Fatal编程技术网

Android 按顺序抛出带有大小写的SQL请求;(1) 按术语排列的第一顺序与结果集中的任何列都不匹配;

Android 按顺序抛出带有大小写的SQL请求;(1) 按术语排列的第一顺序与结果集中的任何列都不匹配;,android,sql,sqlite,Android,Sql,Sqlite,我有一个SQL游标的小问题。 我正在尝试在android上执行SQL命令。我试图按大小写对返回的内容进行排序,但系统似乎不接受返回的值(?) 我什么都试过了!你有解决办法吗?;) 我需要像这样对命令排序吗 SELECT * FROM characters WHERE UPPER(descriptions) LIKE '%" + TextUtils.join("%", arr) + "%' UNION ALL SELECT * FROM words WHERE UPPER(description

我有一个SQL游标的小问题。 我正在尝试在android上执行SQL命令。我试图按大小写对返回的内容进行排序,但系统似乎不接受返回的值(?) 我什么都试过了!你有解决办法吗?;)

我需要像这样对命令排序吗

SELECT * FROM characters WHERE UPPER(descriptions) LIKE '%" + TextUtils.join("%", arr) + "%' 
UNION ALL
SELECT * FROM words WHERE UPPER(descriptions) LIKE '%" + TextUtils.join("%", arr) + "%'                                     
ORDER BY
    CASE
        WHEN UPPER(descriptions) LIKE '" + s + "' THEN 1          
        WHEN UPPER(descriptions) LIKE '" + s + "|%' THEN 2 
        WHEN UPPER(descriptions) LIKE '%|" + s + "|%' THEN 2 
        WHEN UPPER(descriptions) LIKE '%|" + s + "' THEN 2 
        WHEN UPPER(descriptions) LIKE '%" + TextUtils.join(" ", arr) + "%' THEN 3 
        ELSE 4 
    END,
descriptions ASC
谢谢;)

编辑: 插入搜索词“测试”后的SQL命令

表架构:

characters (t TEXT,s TEXT,jy TEXT,descriptions TEXT)
words (t TEXT,s TEXT,jy TEXT,descriptions TEXT)

从单个表中选择记录时,可以使用这些记录中的任何内容进行排序

但是,当您将多个查询与UNION组合时,将对整个结果进行排序,因此必须使用结果中的某个列进行排序。 在这种情况下,这意味着您必须将计算移动到查询本身中:

SELECT t, s, jy, descriptions, CASE ... END AS ordernr FROM ...
UNION ALL
SELECT t, s, jy, descriptions, CASE ... END AS ordernr FROM ...
ORDER BY ordernr,
         descriptions
请参阅并尝试指定select语句中的所有列。

真正的原因似乎是:

在标准SQL中,ORDER BY子句必须是(1)正 整数,表示按相应列排序或(2)精确副本 定义列的表达式之一的。该命令可能不会生效 在标准SQL中具有任意表达式。许多RDBMSE(包括 SQLite)对其进行扩展,以便在 ORDERBY子句,但对于UNION查询,该增强 不适用(由于技术原因)和原始标准SQL 限制是有效的


在变量被替换后,您能打印出SQL吗?您确定在
字符表中有一个名为
说明
的列吗?我100%确定“说明”列存在。我用替换的sql编辑了主要帖子;)THX如果在您的arr或s中有一个包含“”的值,该怎么办?好的,也许你没有。就像你可以在替换的sql中看到的那样,即使变量不包含“尝试为你的case语句提供一个别名,也许?!”?!我认为问题仍然在于这个案子。。。结束部分。即使我将orderbydescriptions命令替换为'4',或者忽略它,错误仍然存在。该错误还声明了“(1)按项排列的一阶…”,因此它清楚地说明了第一部分中的一个问题。@CL。你的描述显然是错的
Union
(和
Union all
)从Union中的第一个表/查询中获取列名。语句末尾的
order by
则适用于联合结果。@PhilPlückthun是的,第一个术语也有同样的问题;更新。
characters (t TEXT,s TEXT,jy TEXT,descriptions TEXT)
words (t TEXT,s TEXT,jy TEXT,descriptions TEXT)
SELECT t, s, jy, descriptions, CASE ... END AS ordernr FROM ...
UNION ALL
SELECT t, s, jy, descriptions, CASE ... END AS ordernr FROM ...
ORDER BY ordernr,
         descriptions