2016-08-24 86 views
1

我正在使用MySQL數據庫。我想結合三個選擇查詢,以「提高性能」。下面的每個選擇取決於先前檢索的ID。合併選擇查詢

到目前爲止,我已經試過以下...

# multiple select from tables 
select user.name, group.ID 
    from user as u, group as g 
    where u.name = <name_here> 

# inner join... 
select user.ID, group.ID, 
    from user 
    inner join group 
     on user.ID = group.ID 

我需要選擇基於用戶名PARAM的user.name和group.ID。有沒有辦法在單個語句中查詢這些數據?

+0

我剛剛更新爲清晰起見。 –

回答

3

我不知道我理解你的需求,讓我們嘗試:

嘗試使用此查詢:

select pGroupMatch.GroupID, ProfileData.ID 
from pUserMatch 
inner join pGroupMatch on pGroupMatch.GroupID = pUserMatch.GroupID 
inner join ProfileData on ProfileData.id = pGroupMatch.ProfileID 
where pUserMatch.username = "<username>"; 

檢查,如果你可以創建索引提高查詢,如果你可以試試它:

CREATE INDEX idx_pUserMatch_01 ON pUserMatch (GroupID); 
CREATE INDEX idx_pGroupMatch_01 ON pGroupMatch (ProfileID); 
1

請使用加入您的要求。請嘗試以下查詢

select t3.* from Profiles.pUserMatch t1 
left join Profiles.pGroupMatch t2 ON t2.GroupID=t1.GroupID 
left join Profiles.ProfileData t3 ON t3.ID=t2.ProfileID 
where t1.username = "<username>"; 

我希望以上的查詢能幫到你。請隨時發表評論。謝謝。

0

你不需要外鍵加入的東西:

select p.* from Profiles.pUserMatch u 
join Profile.pGroupMatch g on u.GroupID = g.GroupID 
join Profile.ProfileData p on g.ProfileID = p.ID 
where u.username = ? 
1

這是你通過加入樹查詢,得到查詢你已經有:

SELECT pd.* 
FROM Profiles.ProfileData pd 
    # ... where ID = "<profile_id>", profile_id = select ProfileID from ... 
    INNER JOIN Profiles.pGroupMatch pm ON pd.ID = pm.ProfileID 
    # ... where GroupID = "<group_id>", group_id = select GroupID from ... 
    INNER JOIN Profiles.pUserMatch pu ON pm.GroupID = pm.GroupID 
WHERE pm.username = "<username>" 

我把意見碎片您的查詢被轉換爲JOIN小節。

瞭解更多關於SELECT statementJOIN subclause的語法。