如何使用排除

时间:2018-04-28 15:36:48

标签: mysql sql join

我有3张桌子:

  1. 用户[id,name]
  2. 黑名单[blockerid,blockedid]
  3. location [uuid,lat,lon]
  4. 我需要从位置表中获取所有数据,条件是如果要求位置的人在黑名单中显示为阻止或被阻止,则不会看到这些被禁止的位置。 E.g:

    Blacklist:
    10 11
    
    Location
    10 74.1231 51.12312
    11 82.1231 -1.31241
    12 10.2121 34.12312
    

    如果12要求他获得所有位置。如果11要求位置,他将只获得12的位置,与10相同。

    在请求中需要帮助

2 个答案:

答案 0 :(得分:1)

您可以使用union来获取blockerid和blockid作为不在

中的id
PersonView

答案 1 :(得分:0)

我强烈建议将查询定相为:

select l.*
from location l
where not exists (select 1 from blocklist bl where bl.blockerid = l.uuid and bl.blockedid = ?) and
      not exists (select 1 from blocklist bl where bl.blockedid = l.uuid and bl.blockerid = ?);

?是您关注的用户ID的占位符。

这可以利用blocklistblocklist(blockerid, blockedid)blocklist(blockedid, blockerid)上的两个索引获得显着的性能提升。