sql >> データベース >  >> RDS >> PostgreSQL

ユーザー変数の応答に最適なデータベースデータを見つける

    各列の「列挙型」値を結合できます。 (それがあなたが見逃している主なもののようです。)

    WHERE 次に、'TRUE'と等しくなければならないものをフィルタリングできる句 。

    ORDER BYを使用する 'MAYBE'であるもののために 。それらを'TRUE'と比較してください その比較をintegerにキャストします 。キャストされた比較の結果を合計し、その合計を降順に並べ替えます。

    SELECT v.venue_name
           FROM venue_table v
                INNER JOIN response_enum_table rp
                           ON rp.id = v.parking
                INNER JOIN response_enum_table rd
                           ON rd.id = v.decorations
                INNER JOIN response_enum_table rh
                           ON rh.id = v.hotel
             -- INNER JOIN response_enum_table rx
             --            ON rx.id = v.x
             -- INNER JOIN response_enum_table ry
             --            ON ry.id = v.y
             -- ...
           WHERE rh.value = 'TRUE'
              -- AND rx.value = 'TRUE'
              -- ...
           ORDER BY (rp.value = 'TRUE')::integer
                 -- + (ry.value = 'TRUE')::integer
                 -- ...
                    DESC;
    

    補足:Postgresはデータ型自体として列挙型を提供します。これらを使用するように会場テーブルのスキーマを変更できれば、結合は必要ありません。




    1. 単一方向のDBLinkを介して1つのOracleDBから別のOracleDBにテーブルをコピーする

    2. JOOQを使用して、notin句で複数の列を指定して削除を実行します

    3. mySQL各カテゴリの上位5つを返す

    4. sql-存在しない場合は挿入