组合选择查询

时间:2016-08-24 13:02:25

标签: mysql

我正在使用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。有没有办法在一个语句中查询这些数据?

4 个答案:

答案 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 :(得分: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>";

我希望上面的查询可以帮到你。请随时发表评论。感谢。

答案 2 :(得分: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子条款。

详细了解JOIN subclauseSELECT statement语法。

答案 3 :(得分: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 = ?