【发布时间】:2012-07-19 05:21:03
【问题描述】:
我这里有个问题。
现在我有三个表(宠物、地址、联系人):
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
我想将这些表与列合并为一个表:
PET_ID_PK
PETNAME
ADDRESS_STRING
CONTACT_NUMBER
GENDER
我希望得到属于特定OWNER_ID的宠物,并按照GENDER的顺序显示行(先是FEMALE,然后是MALE)。在这种情况下,我可以使用 ORDER BY CASE。
但是在每个用户表条目中,ADDRESS_ID_FK 或 CONTACT_ID_FK 都将为 NULL 值。 因此,参考Unioning Two Tables With Different Number Of Columns 中提供的解决具有 NULL 值的列的解决方案,我提出了以下查询:
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
但是这个查询没有相应地工作。
希望有人可以帮助我解决这个问题。谢谢。
【问题讨论】:
-
not working accordingly是什么意思?
标签: mysql sql phpmyadmin