【发布时间】:2012-10-19 06:40:15
【问题描述】:
我有一个名为USERS 的表和一个名为ADDRESSES 的表,还有一个ADDRESS_TYPE 表。每个用户可以有多个地址。
SELECT *
FROM USER
INNER JOIN address ON address.userId = user.userId
INNER JOIN address_type ON address_type.id = address.addressType
WHERE addressType = 4
OR primaryAddress = 1
如果 addressType 为 4,我想将地址表加入用户表,但如果他们的 addressType 不是 4,它应该拉入标记为主要的地址。基本上问题是我需要对查询进行分组,以便每个用户只获得 1 行,同时具有逻辑 =“如果 addressType = 4,加入这个地址,否则如果 primaryAddress = 1,加入这个另一个地址”。
希望这是有道理的,非常感谢任何帮助。
编辑:这些是我正在处理的表格:
用户表
+--------+-----------------+-----------------+
|用户名 |名字 |姓氏 |
+--------+-----------------+-----------------+
| 10001 |黛比 |巴松 |
| 10002 |巴马瓦马 |九冬 |
| 10003 |杰西卡M |史蒂夫 |
| 10004 |金农 |白色 |
+--------+-----------------+-----------------+
地址类型
+----+------+-------------+------------+--------- --+
|编号 |代码 |描述 |可修改 |数据状态 |
+----+------+-------------+------------+--------- --+
| 1 |主页 |主页 | 1 | 1 |
| 2 |布斯 |商业 | 1 | 1 |
| 3 | SCH |学校 | 1 | 1 |
| 4 |唐 |捐赠者地址 | 1 | 1 |
+----+------+-------------+------------+--------- --+
地址表
+----------------+--------+----------- --+-------------+--------------+
|主地址 |用户名 |街道1 |城市|地址类型 |
+----------------+--------+----------- --+-------------+--------------+
| 0 | 10001 | 12660 皮卡特广场|圣地亚哥 | 1 |
| 0 | 10001 |威尔希尔大街 446 号 |富乐顿 | 2 |
| 0 | 10001 | 4224 E. 114 路 |桑顿 | 3 |
| 1 | 10001 |科罗拉多大道 828 号|洛杉矶 | 4 |
| 0 | 10002 | 40A 林登大道,#2 |萨默维尔 | 1 |
| 0 | 10002 | 446 37 街,#2 |奥克兰 |空|
| 1 | 10002 |邮政信箱 06562 |芝加哥 |空|
| 0 | 10002 | 1281 W. 2nd St. |圣佩德罗 |空|
| 1 | 10003 | 10557 S.奥克利大道。芝加哥 |空|
| 0 | 10003 | 1425 哈里森街,#324 |奥克兰 |空|
+----------------+--------+----------- --+-------------+--------------+
【问题讨论】:
-
您遗漏了一些信息,最好通过向我们展示您的表格的外观来解决这些信息。 (例如,
addressType驻留在哪个表中,primaryAddress驻留在哪个表中。没有这些信息也可以回答,但这对我们来说是一个不必要的难题 -
如果您不打算对 ADDRESS_TYPE 进行任何更改,那么您可能需要考虑将地址类型作为 ENUM 放入 ADDRESSES 中
-
“primaryAddress”是否位于“address_type”表中?
标签: mysql sql if-statement group-by conditional