sql >> Database teknologi >  >> RDS >> PostgreSQL

Sådan udføres flere joinforbindelser med forskellige parametre i en enkelt forespørgsel

\i tmp.sql

create table question
        (question_id integer not null primary key)
        ;
INSERT INTO question(question_id) VALUES
( 42) , ( 10) , ( 2) , ( 36) , ( 49) ;

create table question_exclusion
        ( question_type text
        , question_sub_type text
        , question_id integer REFERENCES question( question_id)
        );

INSERT INTO question_exclusion(question_type, question_sub_type, question_id) VALUES
 ('A' , 'A_1' , 42 ) , ('A' , 'A_2' , 10 ) , ('B' , 'B_1' , 36  ) , ('C' , null  , 2 ) ;

WITH types AS (
        select distinct question_type, question_sub_type
        FROM question_exclusion
        )
SELECT t.question_type, t.question_sub_type, q.question_id
FROM question q
JOIN types t ON NOT EXISTS (
        SELECT * FROM question_exclusion x
        WHERE 1=1
        AND x.question_id = q.question_id
        AND x.question_type = t.question_type
        AND x.question_sub_type = t.question_sub_type
        )
ORDER BY t.question_type, t.question_sub_type
        ;
 

Ændret:

WITH types AS ( select distinct question_type, question_sub_type FROM question_exclusion ) SELECT t.question_type, t.question_sub_type, q.question_id FROM question q CROSS JOIN types t WHERE NOT EXISTS ( SELECT * FROM question_exclusion x WHERE 1=1 AND x.question_id = q.question_id AND x.question_type = t.question_type AND x.question_sub_type = t.question_sub_type ) ORDER BY t.question_type, t.question_sub_type ;

FORSKELLER IKKE FRA

WITH types AS ( select distinct question_type, question_sub_type FROM question_exclusion ) SELECT t.question_type, t.question_sub_type, q.question_id FROM question q CROSS JOIN types t WHERE NOT EXISTS ( SELECT * FROM question_exclusion x WHERE 1=1 AND x.question_id = q.question_id AND (x.question_type, x.question_sub_type) IS NOT DISTINCT FROM (t.question_type, t.question_sub_type) ) ORDER BY t.question_type, t.question_sub_type ;

  1. Sådan fungerer TRY_CONVERT() i SQL Server

  2. Hvordan indstiller man forespørgselstimeout i Sequelize?

  3. SQL vælg for alle poster, der kan have en bestemt værdi

  4. Reference til grupper i et MySQL-regex?