如何从同一张user表中分别获取普通id与管理员id对应的不同列
这个需求完全可以实现,你之前的两种写法都存在语法或使用场景错误:
UNION要求前后两个查询的列数、对应列的数据类型完全一致,你第一个查询返回9列、第二个返回2列,必然会报错,且UNION是用于合并多个结构一致的结果集,并不符合你“将两个不同结构的查询结果拼接为一行”的场景。- 你写的
JOIN语法不符合SQL规范,JOIN关联的子查询需要完整结构,你漏写了子查询的FROM关键字,也没有处理关联逻辑。
你可以使用以下两种常用写法实现需求:
写法1:子查询作为固定列
适合场景:仅查询单条指定ID的用户记录,写法简单直接
SELECT a, b, c, d, e, f, g, h, i, (SELECT j FROM user WHERE id = '你的管理员ID' LIMIT 1) AS admin_j, (SELECT k FROM user WHERE id = '你的管理员ID' LIMIT 1) AS admin_k FROM user WHERE id = '你要查询的指定用户ID';
写法2:交叉连接关联管理员子查询
适合场景:需要查询多条指定ID的用户记录,仅需查询一次管理员信息,性能更优
SELECT normal_user.a, normal_user.b, normal_user.c, normal_user.d, normal_user.e, normal_user.f, normal_user.g, normal_user.h, normal_user.i, admin_user.j, admin_user.k FROM user normal_user CROSS JOIN ( SELECT j, k FROM user WHERE id = '你的管理员ID' LIMIT 1 ) admin_user WHERE normal_user.id = '你要查询的指定用户ID';
两种写法最终返回的结果都是1条记录,包含你需要的指定用户9个字段+管理员2个字段,替换SQL中的ID占位符为实际值即可使用。
内容的提问来源于stack exchange,提问作者naive_user
相关产品推荐
相关产品推荐

