求助:如何在MySQL中通过两张表按国家查询鸟类展览发布用户
跨表查询(members & db_birds)的正确SQL写法
你的SQL存在两个关键问题:
- 语法错误:
memberID = userID IN (...)写法不符合SQL规范,此处不需要额外的= userID,子查询返回的userID直接匹配memberID即可 - 子查询误用
SELECT *:IN子查询只需要返回用于匹配的userID字段,返回所有字段会导致逻辑混乱
下面是两种符合需求的正确写法:
方式一:使用IN子查询
SELECT memberID, country FROM members WHERE country = "ZW" AND memberID IN ( SELECT userID FROM db_birds WHERE (title LIKE "%%" OR Species LIKE "%%") AND approvalMsg = "Approved" )
方式二:使用JOIN关联查询(推荐,性能更优)
SELECT DISTINCT m.memberID, m.country FROM members m JOIN db_birds b ON m.memberID = b.userID WHERE m.country = "ZW" AND (b.title LIKE "%%" OR b.Species LIKE "%%") AND b.approvalMsg = "Approved" ORDER BY b.dateModerated DESC;
补充说明:
LIKE "%%"是匹配所有内容的占位写法,实际使用时要替换为用户输入的搜索关键词,比如LIKE "%鸵鸟%"- 添加
DISTINCT是为了避免同一个用户因有多条符合条件的db_birds记录,而重复出现在结果中 - 如果需要按db_birds的
dateModerated排序,JOIN方式更直接,子查询方式可将排序语句移至外层查询
内容的提问来源于stack exchange,提问作者Dion
相关产品推荐
相关产品推荐

