В базе данных "college2" есть 3 TABLES: "студент, курс и регистрация" и один (1) VIEW: "enrolment_status", который создается с помощью следующей команды:
CREATE VIEW enrolment_status AS
SELECT code, COUNT(id)
FROM enrolment
GROUP BY code;
Объяснить команду для "курса, регистрации и регистрации" в результате:
mysql> EXPLAIN course;
+---------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+-------------+------+-----+---------+-------+
| code | char(8) | NO | PRI | NULL | |
| name | varchar(90) | YES | MUL | NULL | |
| max_enrolment | char(2) | YES | | NULL | |
+---------------+-------------+------+-----+---------+-------+
3 rows in set (0.09 sec)
mysql> explain enrolment;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id | char(6) | YES | MUL | NULL | |
| code | char(8) | YES | MUL | NULL | |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.02 sec)
mysql> explain enrolment_status;
+-----------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+------------+------+-----+---------+-------+
| code | char(8) | YES | | NULL | |
| COUNT(id) | bigint(21) | NO | | 0 | |
+-----------+------------+------+-----+---------+-------+
2 rows in set (0.18 sec)
столбец "max_enrolment" в "курсе" TABLE - это максимально допустимое число учеников для каждого курса, скажем, 10 или 20. "count (id)" в столбце "enrolment_status" VIEW (не таблица) - это фактическое количество учащихся, обучающихся по каждому курсу, Столбец "id" в "зачислении" TABLE - это идентификатор студента, зарегистрированный в курсе.
ЗДЕСЬ МОЙ ВОПРОС: Я хочу иметь "количество мест слева", что является разницей между столбцом "max_enrolment" и столбцом "count (id)". "Количество мест слева" может быть отдельной таблицей или представлением или столбцом, добавленным в любую из приведенных выше таблиц. Как я могу это сделать:
Я пробовал много команд, включая следующие,
CREATE VIEW seats_left AS (
SELECT course.code, course.max_enrolment - enrolment_status.count
FROM course, enrolment_status
WHERE course.code = enrolment_status.code);
... который дает мне следующее сообщение об ошибке:
ERROR 1054 (42S22): Unknown column 'enrolment_status.count' in 'field list'
mysql> SELECT*FROM enrolment_status;
+----------+-----------+
| code | COUNT(id) |
+----------+-----------+
| COMP9583 | 7 |
| COMP9585 | 9 |
| COMP9586 | 7 |
| COMP9653 | 7 |
| COMP9654 | 7 |
| COMP9655 | 8 |
| COMP9658 | 7 |
+----------+-----------+
7 rows in set (0.00 sec)
mysql> SELECT code, max_enrolment FROM course;
+----------+---------------+
| code | max_enrolment |
+----------+---------------+
| COMP9583 | 10 |
| COMP9585 | 15 |
| COMP9586 | 15 |
| COMP9653 | 12 |
| COMP9654 | 10 |
| COMP9655 | 12 |
| COMP9658 | 12 |
+----------+---------------+
7 rows in set (0.00 sec)
+----------+---------------------+
| code | max_enrolment - cnt |
+----------+---------------------+
| COMP9583 | 9 |
| COMP9585 | 14 |
| COMP9586 | 14 |
| COMP9653 | 11 |
| COMP9654 | 9 |
| COMP9655 | 11 |
| COMP9658 | 11 |
+----------+---------------------+
7 rows in set (0.09 sec)
Попробуйте использовать аббревиатуру в представлении.
CREATE VIEW enrolment_status AS
SELECT code, COUNT(id) count
FROM enrolment
GROUP BY code;
Тогда вы сможете это сделать:
CREATE VIEW seats_left AS (
SELECT course.code, course.max_enrolment - enrolment_status.count
FROM course, enrolment_status
WHERE course.code = enrolment_status.code);
Если вы не можете изменить представление, вы должны использовать то же имя в запросе:
CREATE VIEW seats_left AS (
SELECT course.code, course.max_enrolment - enrolment_status.'count(id)'
FROM course, enrolment_status
WHERE course.code = enrolment_status.code);
Попробуй это:
SELECT b.'code',max_enrolment - cnt from
(select 'code', cnt from
(select count(1) as cnt,'code' from enrolment_status
GROUP BY 'code') as a) as a
LEFT JOIN
(SELECT code,max_enrolment from course) as b
on a.'code' = b.'code'
Вы можете изменить left join
на right join
code
). ТКС + Rgds