Error in sqlite query with SELECT CASE

0
CREATE TEMP TABLE var(nombre VARCHAR(255),entero INT(5),texto VARCHAR(255));
CREATE TEMP TABLE param(nombre VARCHAR(255),entero INT(5),texto VARCHAR(255));
INSERT INTO param (nombre,texto) VALUES('criterio','');
INSERT INTO param (nombre,entero) VALUES('pagina',1);
INSERT INTO param (nombre,entero) VALUES('numRegistros',10);
INSERT INTO var (nombre,entero) VALUES('indiceinicial',( (SELECT entero FROM param WHERE nombre='pagina') - 1 ) * (SELECT entero FROM param WHERE nombre='numRegistros'));
SELECT CASE (SELECT texto FROM param WHERE nombre='criterio') 
    WHEN '' THEN (SELECT * FROM clientes ORDER BY id ASC LIMIT (SELECT entero FROM param WHERE nombre='numRegistros') OFFSET (SELECT entero FROM var WHERE nombre='indiceinicial'))
    ELSE
        (SELECT * FROM clientes
        WHERE id LIKE '%'||(SELECT texto FROM param WHERE nombre='criterio')||'%'
        OR nombre LIKE '%'||(SELECT texto FROM param WHERE nombre='criterio')||'%'
        OR fecha_inicio = (SELECT texto FROM param WHERE nombre='criterio')
        OR fecha_final = (SELECT texto FROM param WHERE nombre='criterio')
        OR dni LIKE '%'||(SELECT texto FROM param WHERE nombre='criterio')||'%'
        ORDER BY id ASC LIMIT (SELECT entero FROM param WHERE nombre='numRegistros') OFFSET (SELECT entero FROM var WHERE nombre='indiceinicial'))
    END;
DROP TABLE var;
DROP TABLE param;

The query returns the following error

  

[10:04:02] Error while executing SQL query on database 'spartan': only a single result allowed for a SELECT that is part of an expression

The tables var Y param simulate to be a variable and the parameters of a function in MySQL, if I execute each one of the subqueries if I throw a single result, the problem is when I execute it all in block.

    
asked by iqbal_cs 17.07.2016 в 17:10
source

1 answer

0

The SELECT * FROM clientes within a CASE is returning more than one value (several fields, all those that the table has clients). That's why he gives that error.

To solve this CASE could return you only the id of the clients that interest you and then make a JOIN of that value with clientes to get the rest of the fields.

I put in link what I used to test.

Afternoon but maybe the idea or the db-fiddle page may help

    
answered by 02.05.2017 в 01:14