mysql 多重内连接复杂度

标签 mysql sql join

我有这个疑问。这似乎给我带来了麻烦。如果我去掉第三个表约束,它就会起作用。但我需要第三个表约束来完善我正在进行的搜索。我的问题是它没有给我一个错误,但当它应该用我数据库中的数据至少产生 1 时,它也不会产生结果。

SELECT loc.*, 
       a.firstname, 
       a.lastname, 
       a.profileimg,
       (((acos(sin((37.2790669*pi()/180)) * sin((`latitude`*pi()/180))+cos((37.2790669*pi()/180)) * cos((`latitude`*pi()/180)) * cos(((-121.874722 - `longitude`)*pi()/180))))*180/pi())*60*1.1515) AS `distance` 
  FROM geo_locations loc
  JOIN memb_Info a ON a.mID = loc.mID
 WHERE a.firstname LIKE 'Lisa%' 
   AND loc.primaryAddress = '1' 
   AND memb_x.xName LIKE '%Monkey'
ORDER BY `distance` ASC

如果我删除

AND memb_x.xName LIKE '%Monkey'

我得到的结果没有问题,但 memb_x 表有一个列 xName,它是一个过滤器,我想将其应用于上面的查询,但我似乎迷失了应该如何处理它。我尝试正确地进行内部联接,但这并没有给我带来任何好处,这导致了重复的结果,并且结果实际上并没有涵盖我想要实现的目标。

所以把它分解一下。我想做的是对我的成员(member)进行径向搜索,以便他们可以看到该区域的其他成员(member)。这最初源于 geo_locations,我试图从返回的 id 中获取信息,以便我可以内部加入memb_Info 表用于存储用户名字、姓氏等。所有表之间的一个连接器是 mID,即成员 ID。现在,第三个表上的这个成员 ID 也有具有相似兴趣或过滤器的用户,因此我想根据这些过滤器精简结果,这是我没有正确构建查询的地方,需要帮助修复它。

最佳答案

我不确定你的意思,但你需要的是这样的:

SELECT loc.*, 
   a.firstname, 
   a.lastname, 
   a.profileimg,
   (((acos(sin((37.2790669*pi()/180)) * sin((`latitude`*pi()/180))+cos((37.2790669*pi()/180)) * cos((`latitude`*pi()/180)) * cos(((-121.874722 - `longitude`)*pi()/180))))*180/pi())*60*1.1515) AS `distance` 
FROM geo_locations loc
JOIN memb_Info a ON a.mID = loc.mID 
JOIN memb_x x ON x.mID=loc.mID
WHERE a.firstname LIKE 'Lisa%' 
AND loc.primaryAddress = '1' 
AND x.xName LIKE '%Monkey'
ORDER BY `distance` ASC

关于mysql 多重内连接复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9372266/

相关文章:

mysql : Left Join and Inner Join in a subquery

MySQL - 连接 2 个表和组值

mysql - 具有四个表的 LEFT OUTER JOIN

php - 仅显示参与者超过 20 人的线路

SQL 查找事件的最后日期和最后时间

mysql - 挣扎于 SQL 查询

php - 如何在MySQL中存储欧洲货币?

mysql - 在mysql中,设置连接mysql命令行的权限

mysql - 迭代计数和 where 子句

python - MySQL : BLOB/TEXT column 'id' used in key specification without a key length"的 Django 迁移错误