2011-08-20 56 views
0

我可以通過MySQL JOIN獲得一些幫助嗎?幫助mysql加入

基本上我有4個表,貿易商,streetaccounts(即與交易者相關聯),recommendation_brokerages和建議。我需要從交易員表中獲取所有交易者的姓名和電子郵件地址,其中交易員streetaccount.brokerage_id存在於recommendation_brokerages表和建議表中。

這是我的表的基本結構。

tbl_traders 
-------------------------------------- 
trader_id | trader_name | email 
-------------------------------------- 

tbl_streetaccounts 
-------------------------------------- 
trader_id | brokerage_id 
-------------------------------------- 

tbl_recommendation_brokerages 
-------------------------------------- 
recommendation_id | brokerage_id 
-------------------------------------- 

tbl_recommendations 
-------------------------------------- 
recommendation_id | published 
-------------------------------------- 
+0

你有什麼這麼遠嗎? (並且在超過30個問題後,您應該預期此評論) – Eddy

+0

您應該發佈表格的完整定義,特別是主鍵和外鍵。我們只需要猜測關係。 – cope360

回答

2
select t.* from tbl_traders t 
inner join tbl_streetaccounts s on t.trader_id = s.trader_id 
inner join tbl_recommendation_brokerages rb on s.brokerage_id = rb.brokerage_id 
inner join tbl_recommendations r on t.recommendation_id = r.recommendation_id 

NB,人們普遍認爲「沒有用處」有描述鍵入一個前綴。這種從80年代開始的做法經常受到批評。

喬爾http://www.joelonsoftware.com/articles/Wrong.html

+0

如果他們有多個街道賬戶,這會不會多次返回交易者? – cope360

+0

@ cope360是的,它會。 't。*'之前的'distinct'應該可以解決這個問題。會比子查詢快。 – Hogan

+0

比子查詢還快?我的經驗是,如果子查詢不*引用rowdata(所以它對所有行計算一次,而不是每行計算一次),'NOT IN(SELECT ... WHERE ...)'通常會更快。 – Lucero

0

請參閱這篇文章的部分「我是匈牙利」假設tbl_recommendation_brokerages.recommendation_id是一個外鍵tbl_recommendations.recommendation_id,我們並不需要加入到tbl_recommendations

SELECT 
    t.trader_name, 
    t.email 
FROM 
    tbl_traders t 
WHERE 
    EXISTS (
     SELECT 
      * 
     FROM 
      tbl_streetaccounts acct, 
      tbl_recommendation_brokerages rec 
     WHERE 
      acct.brokerage_id = rec.brokerage_id 
      AND acct.trader_id = t.trader_id 
     )