Mysql 在存储过程中显示两个具有不同列的不同select查询

Mysql 在存储过程中显示两个具有不同列的不同select查询,mysql,stored-procedures,Mysql,Stored Procedures,如何在存储过程中同时显示user1和user2?您需要两次加入users表,第二次是通过trip.u_id2: 请注意,我已经调整了别名以匹配后缀。如果t.u_id 2或t.u_id可为空,则应替换为左联接 Re:这是最优的吗 由于原始查询仅引用用户ID,因此根本不需要连接到用户表: SELECT u.u_id AS user1, u2.u_id as user2 FROM user u INNER JOIN trip t ON u.u_id = t.u_id INNER JOIN

如何在存储过程中同时显示user1和user2?

您需要两次加入users表,第二次是通过trip.u_id2:

请注意,我已经调整了别名以匹配后缀。如果t.u_id 2或t.u_id可为空,则应替换为左联接

Re:这是最优的吗

由于原始查询仅引用用户ID,因此根本不需要连接到用户表:

SELECT u.u_id AS user1, u2.u_id as user2
FROM user u
   INNER JOIN trip t ON u.u_id = t.u_id 
   INNER JOIN user u2 ON t.u_id2 = u2.u_id
WHERE t.u_id2 = 2;

但是很明显,现在您仅限于用户的外键,这对最终用户可能没有用处。

这是优化方法吗?两次加入同一个表会降低性能吗?好吧,因为您当前只是选择用户id键,所以根本不需要加入用户。但很明显,您将无法访问其他用户表列,例如名称等。但一般来说,如果您确实需要来自表用户的其他列,则需要两个联接。如果这些键被索引或制成主键,而外键被索引,您就不会有任何性能问题。存储过程是否允许我选择两个不同的查询而不进行连接?是的,这也是可能的,但不太可能比两列选择更有效。从docs多个SELECT语句生成多个结果集,因此客户端必须使用支持多个结果集的MySQL客户端库。客户机还应指定客户机多结果选项
SELECT u.u_id AS user1, u2.u_id as user2
FROM user u
   INNER JOIN trip t ON u.u_id = t.u_id 
   INNER JOIN user u2 ON t.u_id2 = u2.u_id
WHERE t.u_id2 = 2;
SELECT t.u_id AS user1, t.u_id2 as user2
FROM trip t
WHERE t.u_id2 = 2;