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?
- ¿Cómo insertar datos en la base de datos SQLite en android?
- Excepción de SQLite "no such table" de Android
- ¿Sqlite "inserta o reemplaza" trabajo con AUTOINCREMENT clave primaria?
- Obtener mínimo de la columna de la base de datos SQLite?
- ¿Debo usar un proveedor de contenido?
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)
- Cómo utilizar correctamente claves foráneas en Android, utilizando SQLite y OrmLite
- NPE intermitente al insertar datos en SQLite
- Android AsyncTask - una subclase por operación de base de datos?
- Establecer el valor predeterminado de una columna de enteros SQLite
- Base de datos sqlite pre-relleno android
- Seleccione un primer carácter distinto basado en la columna de cadena
- Cómo evitar errores de bloqueo de SQLiteException
- ¿Por qué mi manejador de excepciones no interrumpe el error de inserción de Android SQLite?
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.
- IllegalStateException en el servicio de juegos de Google Play no tiene sentido
- Android BaseAdapter con Fragmento