我对以下问题的表现因素有疑问。
考虑一个表:用户,
-----userId------- userName-----
1 ABC
2 XYZ
另一张表:交易,
------createdBy----ReceivedBy----TransactionId
1 2 50
2 1 51
我要求的结果是,
--------createdBy----ReceivedBy----TransactionId----userName_Creator-----userName_Receiver
1 2 50 ABC XYZ
2 1 51 XYZ ABC
我提出了两个解决方案,
SELECT * FROM 交易T. 内部联接 ( SELECT createdBy,userName FROM Transaction 内部联接 用户
) ON createdBy = userId INNER JOIN ( SELECT ReceivedBy,userName FROM Transaction Inner Join Users ) ON ReceivedBy= userId WHERE TransactionId = 51
2.为所有不同的userId和username维护一个hashmap,并通过在数据层中查找来打包输出。
哪种解决方案最佳?也欢迎更好的技术。
- 希瓦
答案 0 :(得分:1)
您的查询是一个良好的开端,但它不必要地复杂。请尝试以下方法:
SELECT createdBy, ReceivedBy, TransactionId, userName
FROM Transaction
INNER JOIN Users ON createdBy = userId
更新:在查询中执行此操作是更好的方法(在我看来),因为如果可能的话,从数据库中获取数据是有意义的。如果对查询结果执行(不必要的)额外操作,则可能难以理解您的代码。将它放在查询中也可能更快,因为您的DBMS针对此类操作进行了优化。
答案 1 :(得分:0)
为什么不简单地做类似的事情:
select t.createdBy, t.ReceivedBy, t.TransactionId, u.userName
from Transactions u, Users u
where t.createdBy = u.userId
答案 2 :(得分:0)
使用以下格式:
SELECT a.batsman_id,a.matchs,a.hundreds,b.country_type, c.player_name
FROM batsman a
INNER JOIN countrycode b ON a.country_code=b.country_code
INNER JOIN players c ON a.player_id=c.player_id
ORDER BY a.batsman_id;