mor*_*di3 4 mysql sql left-join
我有2个表,其结构与此类似:
表:用户
fields:id,active_office_address_id(这可以是0)
table:user_address
字段:id,user_id,类型(家庭,办公室)
用户可以拥有"家庭"地址(非强制性)和多个"办公室"地址.我有一个联接来获取用户地址,但我希望如果用户有一个"家"地址来获取该地址,而不是"办公室"地址.
那么,如果存在,我怎样才能获得"归属"地址,并且只有在不存在"办公室"地址时才能获得.(实际上,查询要复杂得多,并且连接在4-5个表上完成)
SELECT * FROM user LEFT JOIN user_address ON (user.id = address.user_id AND
(user_address.type = "home" OR user.active_office_address_id = user_address.id))
group by user.id
Run Code Online (Sandbox Code Playgroud)
您可以使用COALESCE()并加入地址表两次:
SELECT user.id
,COALESCE(home.address, office.address) AS Address
FROM user
LEFT JOIN user_address AS home
ON user.id = home.user_id
AND home.type = "home"
LEFT JOIN user_address AS office
ON user.active_office_address_id = office.user_id
GROUP BY user.id
Run Code Online (Sandbox Code Playgroud)
小智 0
至少在SQL Server中,不确定MySql,可以case在order by子句中使用语句,例如:
order by user.id, case user_address.type when 'home' then 1 else 2 end, --additional ordering clauses here
Run Code Online (Sandbox Code Playgroud)