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;
在我的项目中,前端需要遵循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;