Solicitud de SQL con el caso en orden por tiros "(1) primer término ORDER BY no coincide con ninguna columna en el conjunto de resultados"

Tengo un pequeño problema con un cursor de SQL. Estoy tratando de ejecutar un comando SQL en android. Estoy tratando de ordenar el contenido devuelto por casos, pero parece que el sistema no acepta los valores devueltos (?!) He intentado todo! ¿Tienes la solución? 😉

cursor = db.rawQuery(c, null); String c = "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"; 

¿Necesito ordenar el comando de esta manera?

 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 

Gracias 😉

EDIT: Un comando SQL después de insertar el término de búsqueda "una prueba"

 SELECT * FROM characters WHERE UPPER(descriptions) LIKE '%A%TEST%' UNION ALL SELECT * FROM words WHERE UPPER(descriptions) LIKE '%A%TEST%' ORDER BY CASE WHEN UPPER(descriptions) LIKE 'A TEST' THEN 1 WHEN UPPER(descriptions) LIKE 'A TEST|%' THEN 2 WHEN UPPER(descriptions) LIKE '%|A TEST|%' THEN 2 WHEN UPPER(descriptions) LIKE '%|A TEST' THEN 2 WHEN UPPER(descriptions) LIKE '%A TEST%' THEN 3 ELSE 4 END, descriptions ASC 

Esquema de tabla:

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

Cuando está SELECCIONANDO registros de una sola tabla, puede usar cualquier cosa de esos registros para ordenarlos.

Sin embargo, cuando se combinan varias consultas con UNION, la clasificación se realiza en todo el resultado, por lo que debe utilizar alguna columna del resultado de la ordenación. En este caso, esto significa que debe mover el cálculo a la propia consulta:

 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 

Vea esta publicación y pruebe a especificar todas las columnas de sus sentencias selectas.

  • La concurrencia de webview de Android causó SQLiteException: la base de datos está bloqueada
  • ¿Está correcta la documentación de Android Cursor.moveToNext ()?
  • Desarrollo de Android - SQLite storage float
  • ¿Cómo manejas los registros de antememoria de caché en la aplicación para móviles
  • La aplicación de Android se bloquea al iniciar: SQLite NullPointerException en ContactsFragment
  • ¿Cómo elimino una entrada de fila de tabla sqlite por cadena?
  • Java.lang.IllegalStateException: intento de volver a abrir un objeto ya cerrado (Tried closing)
  • La lectura de cadena gzip en sqlite3 base de datos (python escribir, Java Android leer)
  • Excepción SQLite: la base de datos está bloqueada
  • Devuelve el recuento de registros en una variable, Sqlite, Android, Java
  • Cómo almacenar un valor de tiempo en la base de datos SQLite en Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.