2013-12-17 41 views
1

我對以下問題的性能因子有疑問。數據庫多個內部聯接

考慮一個表:用戶,

-----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. 使用各種不同的內連接,

SELECT * FROM 事務T INNER JOIN ( SELECT createdBy,用戶名從交易 內部聯接 用戶

) 
ON createdBy = userId 
INNER JOIN 
(
    SELECT ReceivedBy,userName FROM Transaction 
    Inner Join 
    Users 
) 
ON ReceivedBy= userId 
WHERE TransactionId = 51 

2。爲所有不同的userId和username維護一個hashmap,並通過查找來打包輸出數據層。

以下哪種解決方案最優?也更好的技術是受歡迎的。

--Siva

回答

0

何不乾脆做這樣的事情:

select t.createdBy, t.ReceivedBy, t.TransactionId, u.userName 
from Transactions u, Users u 
where t.createdBy = u.userId 
+0

你爲什麼不使用真實的(內部)加入? –

+0

這是一個內部連接,它只是使用不同的語法 –

+0

@JoeLove Nevermind,我知道結果是一樣的,認爲性能是不同的,但顯然它不是。 –

1

您的查詢是一個良好的開端,但它是不必要的複雜。請嘗試以下操作:

SELECT createdBy, ReceivedBy, TransactionId, userName 
FROM Transaction 
INNER JOIN Users ON createdBy = userId 

更新:在查詢做它是更好的辦法(在我看來),因爲它是有道理的,從數據庫中獲取你的數據,你想如果可能的話有它的方式。如果你對查詢結果做了(不必要的)額外操作,你的代碼可能會更難理解。將它放入查詢中可能也會更快,因爲您的DBMS已針對此類操作進行了優化。

+0

我已經對該問題進行了編輯。 – siva

+0

@siva,看我的更新 –

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;