sql >> Database >  >> RDS >> PostgreSQL

hoe de kolom in de 'where'-clausule te vermijden als de parameter 'NOT PASSED' is postgresql

Het is niet erg duidelijk wat je bedoelt met is doorgegeven , maar misschien bedoel je dat $3 is een optionele parameter, met $3 afwezig betekenis:maakt niet uit ?

SELECT *
FROM employee
WHERE name = $1
AND age = $2
AND ( $3 IS NULL OR salary = $3)
   ;

Enkele gegevens:

CREATE TABLE employee
        ( name varchar NOT NULL PRIMARY KEY
        , age integer
        , salary integer
        );

INSERT INTO employee ( name , age , salary ) VALUES
 ( 'Alice' , 13 , 3 )
,( 'Bob' , 11 , 5 )
,( 'Charlotte' , 15 , 9 )
,( 'David' , 17 , 10 )
        ;

Hetzelfde als een voorbereide zoekopdracht:

PREPARE qry (text, integer , integer) AS
SELECT *
FROM employee
WHERE name = $1
AND age = $2
AND ( $3 IS NULL OR salary = $3)
   ;

    -- and call the prepared statement:
EXECUTE qry ('Alice', 13, 3);
EXECUTE qry ('Alice', 13, NULL);

Uitgang:

CREATE TABLE
INSERT 0 4
PREPARE
 name  | age | salary 
-------+-----+--------
 Alice |  13 |      3
(1 row)

 name  | age | salary 
-------+-----+--------
 Alice |  13 |      3
(1 row)


  1. Ontbrekende maand toevoegen aan zoekresultaat

  2. MySQL-tabel PRIMARY KEY vraag?

  3. Hoe kan ik dit oplossen Ofwel de parameter @objname is dubbelzinnig of de geclaimde @objtype (COLUMN) is verkeerd.?

  4. PostgreSQL 9.5 - decodeer / selecteer case om fout op te lossen met utf8 werkt niet