# 用于 `Join`

__*子查询的可用位置*__

+ 在太阳系里重力加速度的 Top 3 行星,以及它们的卫星是?
```10
SELECT t3.name, t3.gravity, m.name
FROM universe.moons m
RIGHT JOIN
(SELECT
  p.name, p.gravity, p.id
  FROM universe.planets p
  JOIN universe.stars s
  ON p.sun_id = s.id
  WHERE s.name = 'Sun'
  ORDER BY p.gravity DESC
  LIMIT 3) ~!@t3@!~
ON t3.id = m.planet_id
ORDER BY 2 DESC;
```
-------------------------------------------------
错误的方法:
```
tidb> SELECT
    ->   p.name, p.gravity, m.name
    ->   FROM universe.planets p
    ->   JOIN universe.stars s
    ->   ON p.sun_id = s.id
    ->   JOIN universe.moons m
    ->   ON p.id = m.planet_id
    ->   WHERE s.name = 'Sun'
    ->   ORDER BY p.gravity DESC
    ->   LIMIT 3;
+---------+---------+----------+
| name    | gravity | name     |
+---------+---------+----------+
| Jupiter |    23.1 | Europa   |
| Jupiter |    23.1 | Ganymede |
| Jupiter |    23.1 | Io       |
+---------+---------+----------+
3 rows in set (0.00 sec)
```

正确的方法:
```
tidb> SELECT t3.name, t3.gravity, m.name
    -> FROM universe.moons m
    -> RIGHT JOIN
    -> (SELECT
    -> p.name, p.gravity, p.id
    -> FROM universe.planets p
    -> JOIN universe.stars s
    -> ON p.sun_id = s.id
    -> WHERE s.name = 'Sun'
    -> ORDER BY p.gravity DESC
    -> LIMIT 3) t3
    -> ON t3.id = m.planet_id
    -> ORDER BY 2 DESC;
+---------+---------+----------+
| name    | gravity | name     |
+---------+---------+----------+
| Jupiter |    23.1 | Io       |
| Jupiter |    23.1 | Europa   |
| Jupiter |    23.1 | Ganymede |
| Jupiter |    23.1 | Callisto |
| Neptune |    11.0 | Nereid   |
| Neptune |    11.0 | Triton   |
| Neptune |    11.0 | Larissa  |
| Neptune |    11.0 | Naiad    |
| Neptune |    11.0 | Thalassa |
| Neptune |    11.0 | Despina  |
| Neptune |    11.0 | Galatea  |
| Neptune |    11.0 | Proteus  |
| Earth   |     9.8 | Moon     |
+---------+---------+----------+
13 rows in set (0.00 sec)
```