Я предполагаю, что оба объединенных запроса возвращают одинаковое количество столбцов, поскольку вы не получаете никаких ошибок.
Вы должны использовать правильный синтаксис JOIN
с предложением ON
, а не этот архаичный синтаксис c с запятой.
Кроме того, предложение ORDER BY
, когда оно используется в конце UNION
, применяется к результату UNION
, а не к любому из участвующих запросов. Таким образом, вы не можете использовать псевдонимы таблиц, которые вы ранее установили, для столбцов после ORDER BY
.
Наконец, в вашем запросе есть 2 ?
заполнителей, поэтому вы должны передать в качестве 2-го аргумента rawQuery()
массив из 2 строк. Я предполагаю, что это та же строка, но вы должны использовать ее дважды в массиве.
Так что измените на это:
val parametro_lista_seleccionada = arrayOf(lista_seleccionada.toString(), lista_seleccionada.toString())
val cursor_consulta_sql: Cursor = bd_conexion.rawQuery(
"SELECT * " +
"FROM contenido_lista AS cl INNER JOIN productos AS p " +
"ON cl.id_producto = p.id_producto " +
"WHERE cl.id_lista = ? " +
"UNION " +
"SELECT * " +
"FROM contenido_lista AS cl INNER JOIN productos_manuales AS pm " +
"ON cl.id_producto = pm.id_producto " +
"WHERE cl.id_lista = ? " +
"ORDER BY id_seccion" ,
parametro_lista_seleccionada
)
Просто по имени lista_seleccionada
, я сделаю предположение, возможно, это не строка. Это список? Если это так, то lista_seleccionada.toString()
вернет не 2 строки, а 1 строку, которая представляет собой список строк, разделенных запятыми. Итак, измените на:
val parametro_lista_seleccionada = arrayOf(lista_seleccionada[0], lista_seleccionada[1])
или, если элементы списка являются числами:
val parametro_lista_seleccionada = arrayOf(
lista_seleccionada[0].toString(),
lista_seleccionada[1]
)