数据库多内连接

时间:2013-12-17 18:28:06

标签: java mysql sql database join

我对以下问题的表现因素有疑问。

考虑一个表:用户,

 -----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

我提出了两个解决方案,

  1. 使用各种内部联接,
  2.   

    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,并通过在数据层中查找来打包输出。

    哪种解决方案最佳?也欢迎更好的技术。

    - 希瓦

3 个答案:

答案 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;