ここで問題があります。
現在、3つのテーブル(ペット、住所、連絡先)があります。
USER TABLE COLUMNS:
PET_ID_PK
PETNAME
ADDRESS_ID_FK
CONTACT_ID_FK
GENDER
OWNER_ID
BOUGHT_DATE
ADDRESS TABLE COLUMNS:
ADDRESS_ID_PK
ADDRESS_STRING
CONTACT TABLE COLUMNS:
CONTACT_ID_PK
CONTACT_NUMBER
これらのテーブルを次の列を持つ1つのテーブルに結合したいと思います。
PET_ID_PK
PETNAME
ADDRESS_STRING
CONTACT_NUMBER
GENDER
そして、特定のOWNER_IDに属するペットを取得し、GENDERの順序で行を表示したいと思います(最初に女性、次に男性)。この場合、ORDERBYCASEを使用できます。
ただし、各ユーザーテーブルエントリでは、ADDRESS_ID_FKまたはCONTACT_ID_FKのいずれかがNULL値になります。したがって、 NULL値の列を打ち消す、列数の異なる2つのテーブルの結合で提供されるソリューションを参照して、次のクエリを考え出しました。
SELECT DISTINCT ON (pets.pet_id_pk) * FROM
((SELECT pet_id_pk, petname, address_string, NULL AS contact_id_fk, gender
FROM user JOIN address ON address.address_id_pk=address_id_fk)
UNION
(SELECT pet_id_pk, petname, NULL AS address_string, contact_id_fk, gender
FROM user JOIN address ON contact.contact_id_pk=contact_id_fk) AS pets
WHERE OWNER_ID=$1 ORDER BY (CASE WHEN gender=female ELSE 2 END), bought_date DESC
ただし、このクエリはそれに応じて機能していません。
誰かがこれで私を助けてくれることを願っています。ありがとうございました。