簡體   English   中英

組合選擇查詢

[英]Combining select queries

我正在使用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

我需要根據用戶名參數選擇user.name和group.ID。 有沒有一種方法可以在單個語句中查詢此數據?

我不知道我是否了解您的需求,請嘗試:

嘗試使用此查詢:

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

請根據需要使用join。 請嘗試以下查詢

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

希望以上查詢對您有所幫助。請隨時發表評論。 謝謝。

這是通過加入已有的樹查詢而獲得的查詢:

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語句JOIN子句的語法的更多信息。

您不需要外鍵來加入內容:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM