如何通过单条MySQL查询关联access表双ID与usersx表获取对应last_name
MySQL关联查询获取两个关联用户姓氏的解决方案
我有一个名为access的MySQL表,包含owner_id和date_created_id两个字段;另有一个名为usersx的表,包含id和last_name两个字段。需要通过单条查询语句,从usersx表中获取与access表中某条记录的owner_id和date_created_id分别匹配的两个last_name值。
举个例子:若access表中某条数据的owner_id为123、date_created_id为246,且usersx表中id为123和246的记录对应的last_name分别为Smith和Jones,查询需要得到这两个值。
之前尝试的SQL语句存在逻辑错误,JOIN条件要求access.owner_id和access.date_created_id同时等于usersx.id,这只有当两个ID值相等时才能匹配,无法满足需求:
SELECT usersx.last_name FROM usersx JOIN access ON access.owner_id = usersx.id AND access.date_created_id = usersx.id WHERE access.owner_id = '123' OR access.date_created_id = '246';
正确的查询方法
方法一:通过两次关联获取单行双字段结果
通过给usersx表设置不同别名,两次关联access表,分别获取所有者和创建者的姓氏,结果以单行两个字段返回:
SELECT u1.last_name AS owner_last_name, u2.last_name AS creator_last_name FROM access JOIN usersx u1 ON access.owner_id = u1.id JOIN usersx u2 ON access.date_created_id = u2.id WHERE access.owner_id = '123' AND access.date_created_id = '246';
执行后会得到类似这样的结果:
| owner_last_name | creator_last_name |
|---|---|
| Smith | Jones |
方法二:通过UNION获取两行独立结果
如果需要将两个姓氏以两行形式返回,可以使用UNION组合两个查询:
SELECT usersx.last_name AS name FROM access JOIN usersx ON access.owner_id = usersx.id WHERE access.owner_id = '123' AND access.date_created_id = '246' UNION SELECT usersx.last_name AS name FROM access JOIN usersx ON access.date_created_id = usersx.id WHERE access.owner_id = '123' AND access.date_created_id = '246';
执行后会得到类似这样的结果:
| name |
|---|
| Smith |
| Jones |
内容的提问来源于stack exchange,提问作者Beta Projects
相关产品推荐
相关产品推荐

