2016-09-16 92 views
0

我想添加第三个INNER JOIN到一个SELECT查询,其中第三个INNER JOIN需要查找该第三个表中的值,该值需要与主SELECT查询中MAX + GROUP BY构造的结果。这可能是不可能的,我不知道。我不能让它:-)MySQL内部加入子查询(详细)

TableA 
User - Score 
userA - 10 
userB - 42 
userC - 32 
userB - 42 
userB - 18 
userD - 12 
userB - 65 

工作。

Table B 

User - Color 

userA - Green 

userB - Yellow 

userC - Blue 

在这两个表我使用

SELECT 
MAX(TableA.Score) AS MaxScore, 
TableB.Color 

FROM TableA 

INNER JOIN TableB 
ON TableA.User = TableB.User 

GROUP BY TableA.User 

的输出在这里工作得很好,是

User - MaxScore - Color 

UserA - 10 - Green 

UserB - 65 - Yellow 

UserC - 32 - Blue 

现在,我有一个单独的表,所有的成绩获得名称。

TableC 

Score - Name 

5 - Quite Low 

10 - OK 

25 - Not bad 

32 - Fairly good 

50 - Well done 

65 - Excellent 

我尝试做的是得到查询结果读取...

User - MaxScore - Name - Color 

UserA - 10 - OK - Green 

UserB - 65 - Excellent - Yellow 

UserC - 32 - Fairly Good - Blue 

我的查询会是这个样子......

SELECT 
TableA.User 
MAX(TableA.Score) AS MaxScore, 
TableC.Name, 
TableB.Color 

FROM TableA 

INNER JOIN TableB 
ON TableA.User = TableB.User 

INNER JOIN TableC 
ON TableC.Score = (SELECT MAX(TableA.Score) AS MaxScore FROM Table A GROUP BY TableA.User) ThisSubQueryName 

GROUP BY TableA.User 

我的问题显然是与语法表C的INNER JOIN,INNER JOIN携带该子查询。我不知道该怎么做,或者甚至有可能。

期待您的智慧。

感谢:-)

荷兰

回答

0

试试这个:

SELECT mainQ.*, c.Name 
FROM (
    SELECT a.`User`, MAX(a.Score) AS MaxScore, b.Color 
    FROM TableA AS a 
    INNER JOIN TableB AS b ON a.`User` = b.`User` 
    GROUP BY a.`User` 
) AS mainQ 
INNER JOIN TableC AS c 
ON mainQ.MaxScore = c.Score 

虽然你的子查询可以使用一些修改(涉及表别名并替换它的GROUP BYWHERE),相关的子查询相对昂贵并且通常是不必要的。

编辑:哇,毕竟,我只是意识到我基本上重复scaisEdge的答案的查询;令人惊讶的是,几条新线可以甩掉你的掠夺能力。

+0

延迟歉意,scaisEdge和Uueerdo。我陷入了其他职责,只是今天回到了挑战中。你的答案都很出色。我精心编辑了我的广泛查询,并在第一时间让它工作100%。非常感谢!做得好 :-) –

0

您应该使用DINAMIC表(T),然后内部联接上表C

select t.User, t.MaxScore, c.Name, t.Color from (
      SELECT 
      TableA.User as User 
      MAX(TableA.Score) AS MaxScore, 
      TableB.Color as Color 

      FROM TableA 

      INNER JOIN TableB 
      ON TableA.User = TableB.User 
      GROUP BY TableA.User 
     ) t 
    INNER JOIN TableC on t.MaxScore = TableC.Score 
+0

延误歉意,scaisEdge和Uueerdo。我陷入了其他职责,只是今天回到了挑战中。你的答案都很出色。我精心编辑了我的广泛查询,并在第一时间让它工作100%。非常感谢!伟大的工作:-) –