mysql中内连接的问题

时间:2015-10-20 10:29:21

标签: mysql sql inner-join mysql-workbench

我想将一个查询的输出与mysql中的第二个表连接:

(select 
    A.name, A.address, sum(C.penalty_points) as points
from
    restaurant as A
        inner join
    inspection as B ON A.restaurant_id = B.restaurant_id
        inner join
    violation as C ON C.violation_id = B.violation_id
group by A.name ) 

输出:

name               address                                    points
Kitchen 305        660 Washington Ave                         2
PL8 Kitchen        Southeast 17th Street in Fort Lauderdale   11
Prime One Twelve   112 Ocean Drive                            5
Seasons 52         Palm Beach Gardens                         3
Six Tables         32 East Atlantic                           8
Table 26           Park Racks Downtown Eatery                 2

第二张表的结果:

select * from health_points

输出:

points   health_grade
0        A
1        A
2        A
3        A
4        A
5        B
6        B
7        B
8        B
9        B
10       B
11       C
12       C
13       C
14       C
15       C
17       FAIL
18       FAIL
19       FAIL

有没有办法可以将第一个查询与第二个表结合起来并提取健康等级?我正在尝试这样的事情:

(select 
    A.name, A.address, sum(C.penalty_points) as points
from
    restaurant as A
        inner join
    inspection as B ON A.restaurant_id = B.restaurant_id
        inner join
    violation as C ON C.violation_id = B.violation_id
group by A.name ) as D inner join health_points as E  on D.points = E.points

但它在mysql中显示错误?我在这里错了的任何指示?

2 个答案:

答案 0 :(得分:2)

您缺少外部SELECT子句:

SELECT D.*, E.health_grade
FROM (
  SELECT A.name, A.address, sum(C.penalty_points) as points
  FROM restaurant A
  JOIN inspection B ON (A.restaurant_id = B.restaurant_id)
  JOIN violation C ON (C.violation_id = B.violation_id)
  GROUP BY A.name
) D
JOIN health_points E ON (D.points = E.points)

答案 1 :(得分:2)

你可以这样做:

SELECT
  e.health_grade,
  d.points
FROM
(
  select 
    A.name, A.address, sum(C.penalty_points) as points
  from restaurant as A
  inner join inspection as B ON A.restaurant_id = B.restaurant_id
  inner join violation as C ON C.violation_id = B.violation_id
  group by A.name, A.address
) as D 
inner join health_points as E  on D.points = E.points