oracle如何通过用户id获取地址

How to get address by user's id oracle

在我的项目中,前端需要遵循JSON这种格式的数据。所以我为用户和他们的地址创建了两个 table,

{
   "data":{
      "user":{
         "cif":"102345678",
         "username":"user_00002",
         "fname":"Kevin",
         "lname":"",
         "contactDetails":{
            "permanentAddress":{
               "Line1":"no 1",
               "Line2":"cross lane",
               "city":"dilhi"
            },
            "correspondenceAddress":{
               "Line1":"no 2",
               "Line2":"main street",
               "city":"dilhi"
            },
            "mobile":"32323",
            "email":"tets1@.com"
         }
      }
   }
}

所以我打算使用这个 table 结构,

USER_TABLE

+------------+-------+-------+------------+--------+
| USERNAME   | FNAME | LNAME | EMAIL      | MOBILE |
+------------+-------+-------+------------+--------+
| user_00002 | Jhone | sean  | tets1@.com | 32323  |
+------------+-------+-------+------------+--------+
| user_00003 | Kevin | Niga  | tets2@.com | 23232  |
+------------+-------+-------+------------+--------+
| user_00005 | Mal   | Ruvaw | tets3@.com | 34343  |
+------------+-------+-------+------------+--------+

USER_ADDRESS

+------------+----------------+-------+-------------+----------+
| USERNAME   | ADDRESS_TYPE   | LINE1 | LINE2       | CITY     |
+------------+----------------+-------+-------------+----------+
| user_00002 | PERMANENT      | no 1  | cross lane  | dilhi    |
+------------+----------------+-------+-------------+----------+
| user_00002 | CORRESPONDENSE | no 2  | main street | dilhi    |
+------------+----------------+-------+-------------+----------+
| user_00003 | PERMANENT      | no 33 | cross lane  | jakartha |
+------------+----------------+-------+-------------+----------+
| user_00003 | CORRESPONDENSE | no 35 | main street | jakartha |
+------------+----------------+-------+-------------+----------+

地址 table 我这样创建是因为,每个用户都有两个地址,一个是永久地址,一个是通信地址。那么这个 table 结构可以处理这个问题吗?如果是,那么我需要从 sql 查询中获取以下输出,我该怎么做?

根据我的经验,您的 table 结构对我来说似乎是正确的。您可以先尝试旋转地址 table,然后将 table 加入 user_table -

SELECT *
  FROM USER_TABLE U
  JOIN (SELECT USERNAME,
               MAX(CASE WHEN ADDRESS_TYPE = 'PERMANENT' THEN LINE1 ELSE NULL END) PR_LINE1,
               MAX(CASE WHEN ADDRESS_TYPE = 'PERMANENT' THEN LINE2 ELSE NULL END) PR_LINE2,
               MAX(CASE WHEN ADDRESS_TYPE = 'PERMANENT' THEN CITY ELSE NULL END) PR_CITY,
               MAX(CASE WHEN ADDRESS_TYPE = 'CORRESPONDENSE' THEN LINE1 ELSE NULL END) COR_LINE1,
               MAX(CASE WHEN ADDRESS_TYPE = 'CORRESPONDENSE' THEN LINE2 ELSE NULL END) COR_LINE2,
               MAX(CASE WHEN ADDRESS_TYPE = 'CORRESPONDENSE' THEN CITY ELSE NULL END) COR_CITY
          FROM USER_ADDRESS
         GROUP BY USERNAME) AD ON U.USERNAME = AD.USERNAME;