例子
门店表 store, (Id, Name)
会员表 member(Id, Name, StoreId)
要求:
列出所有门店,并为指定用户Id 所属的门店标记为所Isfavorite = 1。
思路
先取主要数据,再过滤、或联表找关系。
联表是关键:既可以是现有的表,也可以是一张临时表。( select * from xxx ) tempTable 你就可以当成一张表。
sql 过程
- 列出所有门店
- select store.Id,store.Name from store
- 找到指写用户Id的所属门店
- select StoreId from member
where member.Id = "faf24f20-59fe-11e9-bd16"
- 以1为主表,2为辅表,命名为userStore ,left join 关联起来(left jion的用法是 以左边的表为主,去关联右边的表,左边出来多少条数据就是多少条,即使右表没有任何对应的数据。
- 以下就是将所有门店和指定用户的 favorateStoreId在列表数据里标出来了。
- IF、 IS NULL 用法。将favorateStoreId 标记为所Isfavorite = 1,这样前端更好判断
- -- 列出所有门店 ,关联userStore,并用IF 判断标记出 Isfavorite 为1就是默认门店
select store.Id, IF(userStore.StoreId IS NULL,0,1) as Isfavorite, store.Name
from store
left join
-- 找从用户表找到用户的所属门店
(select StoreId from member
where member.Id = "faf24f20-59fe-11e9-bd16-a7e8be91") userStore
on
userStore.StoreId = store.Id
b. 结果如下:
喜欢请关注我们的公众号: